由于ftp是以明文传输的,所以,系统中的用户就显得相对不安全了,但是,我们可以将虚拟用户和我们的本地用户映射。即使***抓到了ftp的用户和密码,也不能登陆系统。

目前有两中方法1、基于pam认证的虚拟用户ftp2、带有web管理界面的pureftpd




下面看看基于pam认证的虚拟用户ftp安装及使用。

1、安装ftp主程序

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm

2生成虚拟用户口令库文件

[root@localhost Server]# cd /etc/vsftpd/

[root@localhost vsftpd]# vim account.txt

基于虚拟用户的ftp服务器_第1张图片

生成口令库文件,并修改其权限:

需要用到db_load 工具,它在db4-utils-4.3.29-10.el5.i386.rpm包中

安装

[root@localhost Server]# rpm -ivh db4-utils-4.3.29-10.el5.i386.rpm

[root@localhost vsftpd]# db_load -T -t hash -f ./account.txt account.db #生成加密后的帐号库

[root@localhost vsftpd]# chmod 600 /etc/vsftpd/account.db #修改权限

3新建一个虚拟用户的PAM文件。加上如下两行内容:

[root@localhost vsftpd]# vim /etc/pam.d/vsftp.vu

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib/security/pam_userdb.so db=/etc/vsftpd/account

4.建立虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:

[root@localhost vsftpd]# useradd -d /home/ftpsite virtual_user

[root@localhost vsftpd]# chmod 700 /home/ftpsite

5.编辑/etc/vsftpd/vsftpd.conf文件

12 anonymous_enable=NO #修改

#禁用

#pam_service_name=vsftpd

#userlist_enable=YES

#tcp_wrappers=YES

#添加

guest_enable=YES #允许客户访问

guest_username=virtual_user #访问者的用户名为virtual_user

pam_service_name=vsftpd.vu #指明pam认证的文件名

基于虚拟用户的ftp服务器_第2张图片

[root@localhost ~]# service vsftpd start #启动ftp

在虚拟FTP服务器中,也可以对各个用户的权限进行设置。方法是在/etc/vsftpd/vsftpd.conf文件中添加如下一行:
user_config_dir=/etc/vsftpd_user_conf

基于虚拟用户的ftp服务器_第3张图片

然后在用户配置文件目录下创建相应的用户配置文件,比如为上述名为test的用户创建一个配置文件

[root@localhost ~]# vim /etc/vsftpd_user_conf/test

write_enable=YES #能够上传

anon_upload_enable=YES #能够下载

local_root=/home/ftpsite/test #家目录

基于虚拟用户的ftp服务器_第4张图片

创建用户家目录,并且将家目录用户名和用户组改为virtual_user

[root@localhost ~]# service vsftpd restart

测试

基于虚拟用户的ftp服务器_第5张图片

基于虚拟用户的ftp服务器_第6张图片

上传文件

基于虚拟用户的ftp服务器_第7张图片

 9.添加FTP用户的步骤

     1.account.txt中添加用户名和密码

     2.运行如下命令,将用户名和密码添加到数据库中

       db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db

     3./home/ftpsite中新建一个文件夹,与用户明相同

     4.vsftpd_user_conf文件夹下新建和用户名相同的文件,并在其中加入

      local_root=/home/ftpsite/用户名

下面,pureftpd安装及使用。

前提,我们使用×××的lamp环境

1、下载pureftpd

2、安装

解压

[root@zlj ~]# tar -zxvf pure-ftpd-1.0.36.tar.gz -C /usr/local/src/

预编译

[root@zlj pure-ftpd-1.0.36]# ./configure       --prefix=/usr/local/pureftpd        --with-mysql=/usr/local/mysql        --with-shadow        --with-pam          --with-welcomemsg          --with-uploadscript         --with-cookie          --with-virtualchroot        --with-virtualhosts        --with-diraliases        --with-quotas        --with-puredb        --with-sysquotas         --with-ratios        --with-ftpwho       --with-throttling --with-language=simplified-chinese

编译

[root@zlj pure-ftpd-1.0.36]# make

基于虚拟用户的ftp服务器_第8张图片

安装

[root@zlj pure-ftpd-1.0.36]# make install

基于虚拟用户的ftp服务器_第9张图片

3生成pure-ftpd的服务脚本

[root@zlj pure-ftpd-1.0.36]# cd configuration-file/

[root@zlj configuration-file]# chmod a+x pure-config.pl

[root@zlj configuration-file]# cp pure-config.pl /usr/local/pureftpd/sbin/

[root@zlj pure-ftpd-1.0.36]# mkdir /usr/local/pureftpd/etc

[root@zlj pure-ftpd-1.0.36]# cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/

[root@zlj pure-ftpd-1.0.36]#

4生成pure-ftpd的服务

[root@zlj configuration-file]# cd ..

[root@zlj pure-ftpd-1.0.36]# cp contrib/redhat.init /etc/init.d/pureftpd

[root@zlj pure-ftpd-1.0.36]# vim /etc/init.d/pureftpd

fullpath=/usr/local/pureftpd/sbin/$prog

pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf --daemonize>/dev/null

killall pure-ftpd

基于虚拟用户的ftp服务器_第10张图片

修改权限

[root@zlj pure-ftpd-1.0.36]# chmod 755 /etc/init.d/pureftpd

添加开机启动

[root@zlj pure-ftpd-1.0.36]# chkconfig pureftpd on

启动

[root@zlj pure-ftpd-1.0.36]# service pureftpd start

5配置匿名用户登录环境

修改配置文件

[root@zlj pure-ftpd-1.0.36]# vim /usr/local/pureftpd/etc/pure-ftpd.conf

其中有几项要修改:

        chrootEveryone              yes   限定在自己的家目录

       NoAnonymous                 yes   不允许匿名登录

       Bind                      127.0.0.1,21        监听本机回环 <可选>

       Bind                      192.168.0.254,21    监听本机IP  <自行添加的,非必须>

      CreateHomeDir               yes   允许用户登录后自动创建家目录   <必须>

6配置虚拟用户登录环境

[root@zlj pure-ftpd-1.0.36]# mkdir /ftproot

[root@zlj pure-ftpd-1.0.36]# chmod -R 777 /ftproot<这不不做可以能会引起登录时报421错误>

[root@zlj pure-ftpd-1.0.36]# useradd virtualftp -d /ftproot -s /sbin/nologin -M<创建接下来的虚拟用户对应的系统用户>

[root@zlj pure-ftpd-1.0.36]# chown virtualftp:virtualftp /ftproot/

[root@zlj pure-ftpd-1.0.36]#

7、虚拟用户使用篇

流程图:

基于虚拟用户的ftp服务器_第11张图片

()pureDB认证

A修改配置文件

[root@zlj pure-ftpd-1.0.36]# vim /usr/local/pureftpd/etc/pure-ftpd.conf

PureDB                        /usr/local/pureftpd/pureftpd.pdb

[root@zlj pure-ftpd-1.0.36]# cd /usr/local/pureftpdbin/

B添加用户

[root@zlj bin]# ./pure-pw useradd user1 -u virtualftp -g virtualftp -d /ftproot/user1 -m

说明:

    user1是用户名,-u virtualftp是其实际的linux用户,-d指定起始目录,并锁定于该目录。如果不锁定,则用-D;如果需要不同的权限,可以建立新的linux用户与组

      如果用的系统自带的ftp用户,这样的话还需修改配置文件pure-ftpd.conf中的MinUIDftp用户的UID 14,否则登录时会出现530错误;所以这里建议创建另一个非系统自带的用户做映射

C 建立用户数据库:

[root@zlj bin]# ./pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb

说明:今后每添加或修改用户数据库都应该执行一次mkdb

D删除一个用户

pure-pw userdel [-f ] [-m]

这时,用户的信息会被从指定的 passwd 文件中删除,但是用户的 home 目录会被保留,需要手工删除

E更改一个用户口令

pure-pw passwd [-f ] [-m]

F显示用户信息

/etc/pureftpd.passwd   文件中记录的信息不方便用户的阅读,因此   pure-ftpd   提供了显示用户信息的命令。其语法是:

pure-pw show [-f ]

G重启

[root@zlj bin]# service pureftpd restart

Stopping pure-config.pl:

Starting pure-config.pl:

H、测试

[root@zlj bin]# ftp 10.106.10.7

基于虚拟用户的ftp服务器_第12张图片

()mysql认证

A、配置文件

[root@zlj bin]# vim /usr/local/pureftpd/etc/pure-ftpd.conf

MySQLConfigFile               /usr/local/pureftpd/etc/pureftpd-mysql.conf #指明sql的配置文件

B下载web管理程序pureadmin0.3

解压

[root@zlj ~]# tar xvf PureAdmin-0.3.tar.gz -C /usr/local/apache/htdocs/

[root@zlj ~]# cd /usr/local/apache/htdocs/

改名

[root@zlj htdocs]# mv PureAdmin-0.3/ pueradmin

[root@zlj htdocs]# cd pueradmin/

[root@zlj pueradmin]#

C导入数据到mysql

配置文件

[root@zlj ~]# vim pureftp.sql

注意其中的

    22 -- Login = ftp             此为登录数据库的用户

    23 -- Password = tmppasswd    此为登录数据库的密码

    31 CREATE DATABASE ftpusers;  创建名为ftpusers的库

    50 INSERT INTO admin VALUES ('admin',MD5('passwd'));  此为登录web用的用户密码,可自行修改

导入数据,导入前可能需要修改此sql文件的15行:前2个减号空一格-- ------------------------------------------------------->

基于虚拟用户的ftp服务器_第13张图片

导入

提示

ERROR 1064 (42000) at line 39: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 5

说明数据库不支持这种引擎,修改配置

基于虚拟用户的ftp服务器_第14张图片

基于虚拟用户的ftp服务器_第15张图片

再试

D查看mysql添加连接mysql用户

先用root登录mysql,执行

mysql>grant all privileges on ftpusers.* to ftp@localhost identified by 'tmppasswd';

mysql>flush privileges;

mysql>quit;

F修改pureadmin的配置文件

[root@zlj ~]# cd /usr/local/apache/htdocs/pueradmin/

[root@zlj pueradmin]# vim config.php

$cfg['dbhost']='localhost'; //mysql host

$cfg['dbname']='ftpusers';  //mysql db name                            所用的库<与前面导入的sql中要一致>

$cfg['dbuser']='ftp';           //mysql user                           登录mysql的帐号

$cfg['dbpasswd']='tmppasswd';           //mysql password               登录mysql的密码

//ftp config

$cfg['page']=10;                                                       每页显示的用户数量

//ftp passwd type : TEXT/CRYPT/MD5

$cfg['passwdtype']='MD5';                                              认证模式<要与pureftpd-mysql.conf中一致>

//ftp default

$cfg['uid']=500;  //uid                                                映射虚拟用户的UID,即刚创建的virtualftp用户

$cfg['gid']=501;        //gid                                          同上

$cfg['dir']='/ftproot/'; //dir                                          默认家目录

$cfg['qf']=0;   //quotafiles                                           文件个数限制,0为不限制

$cfg['qs']=100; //quotasize                                            总文件大小

$cfg['ul']=0;   //ULBandwidth                                          上传速率限制

$cfg['dl']=200; //DLBandwidth                                          下载速率限制

$cfg['ur']=0;   //ULRatio                                              上传比

$cfg['dr']=0;   //DLRatio                                              下载比

$cfg['status']=1; //status                                             状态,1为激活;0为禁止

$cfg['ip']= '*';        //ipaddress                                    可访问IP*为所有

?>

基于虚拟用户的ftp服务器_第16张图片

G下载pureftpd-mysql.conf文件

连接数据库mysql的配置文件

[root@zlj pueradmin]# cd /usr/local/pureftpd/etc/

[root@zlj etc]# vim pureftpd-mysql.conf

修改如下:

MYSQLUser      ftp

MYSQLPassword   tmppasswd

MYSQLDatabase   ftpusers

MYSQLCrypt      md5

[root@zlj etc]# service pureftpd restart

H登陆,测试

基于虚拟用户的ftp服务器_第17张图片

点击新建,新建一个用户

基于虚拟用户的ftp服务器_第18张图片

基于虚拟用户的ftp服务器_第19张图片

同样创建user3

基于虚拟用户的ftp服务器_第20张图片

登陆

基于虚拟用户的ftp服务器_第21张图片

提示失败,查看日志

May 24 03:04:25 zlj pure-ftpd: ([email protected]) [INFO] 10.106.10.9 的新连接

May 24 03:04:30 zlj pure-ftpd: ([email protected]) [ERROR] SQL server好像当掉了 [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)]

May 24 03:04:34 zlj pure-ftpd: ([email protected]) [WARNING] 使用者[user2]验证失败

提示我们找不到/var/lib/mysql/mysql.sock,我们创建这样的文件

[root@zlj mysql]# mkdir /var/lib/mysql/   #创建文件

[root@zlj mysql]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock #创建软连接

再次测试

基于虚拟用户的ftp服务器_第22张图片

User2能够成功

基于虚拟用户的ftp服务器_第23张图片

User3也能够成功

查看ftp的根目录,可以我看到系统为我们创建了三个目录

基于虚拟用户的ftp服务器_第24张图片