由于ftp是以明文传输的,所以,系统中的用户就显得相对不安全了,但是,我们可以将虚拟用户和我们的本地用户映射。即使***抓到了ftp的用户和密码,也不能登陆系统。
目前有两中方法1、基于pam认证的虚拟用户ftp;2、带有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
生成口令库文件,并修改其权限:
需要用到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认证的文件名
[root@localhost ~]# service vsftpd start #启动ftp
在虚拟FTP服务器中,也可以对各个用户的权限进行设置。方法是在/etc/vsftpd/vsftpd.conf文件中添加如下一行:
user_config_dir=/etc/vsftpd_user_conf
然后在用户配置文件目录下创建相应的用户配置文件,比如为上述名为test的用户创建一个配置文件
[root@localhost ~]# vim /etc/vsftpd_user_conf/test
write_enable=YES #能够上传
anon_upload_enable=YES #能够下载
local_root=/home/ftpsite/test #家目录
创建用户家目录,并且将家目录用户名和用户组改为virtual_user
[root@localhost ~]# service vsftpd restart
测试
上传文件
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
安装
[root@zlj pure-ftpd-1.0.36]# make install
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
修改权限
[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、虚拟用户使用篇
流程图:
(一)用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中的MinUID为ftp用户的UID 14,否则登录时会出现530错误;所以这里建议创建另一个非系统自带的用户做映射
C、 建立用户数据库:
[root@zlj bin]# ./pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb
说明:今后每添加或修改用户数据库都应该执行一次mkdb
D、删除一个用户
pure-pw userdel
这时,用户的信息会被从指定的 passwd 文件中删除,但是用户的 home 目录会被保留,需要手工删除
E、更改一个用户口令
pure-pw passwd
F、显示用户信息
/etc/pureftpd.passwd 文件中记录的信息不方便用户的阅读,因此 pure-ftpd 提供了显示用户信息的命令。其语法是:
pure-pw show
G、重启
[root@zlj bin]# service pureftpd restart
Stopping pure-config.pl:
Starting pure-config.pl:
H、测试
[root@zlj bin]# ftp 10.106.10.7
(二)用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个减号空一格-- ------------------------------------------------------->
导入
提示
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
说明数据库不支持这种引擎,修改配置
再试
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,*为所有
?>
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、登陆,测试
点击新建,新建一个用户
同样创建user3
登陆
提示失败,查看日志
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 #创建软连接
再次测试
User2能够成功
User3也能够成功
查看ftp的根目录,可以我看到系统为我们创建了三个目录