工作中用到ftp传输文件,选择比较流行的vsftp,由于vsftp默认用系统用户登录,在外网环境传输数据,存在很大的安全隐患,原因是ftp明文传输,可以轻易抓包得出用户名和密码。如果vsftp用到的系统用户,登录shell设置为/bin/nologin,则vsftp也不能登录(测试过一次,大概是这样)。
鉴于之前tomcat默认管理页面被利用的惨痛教训,下决心配置vsftp的虚拟用户,杜绝安全隐患。
以下总结下流程和遇到的几个问题:
vsftp-3.0.2 的虚拟用户配置:
1. 生成虚拟用户的账号和密码
account.txt 奇数行为用户名,偶数行为密码
内容:
virtual_user1
paswd1
virutal_user2
paswd2
生成伯克利DB格式的数据库文件:db_load -T -t hash -f account.txt /etc/vsftpd/account.db
2. 增加pam认证的支持
# vi /etc/pam.d/ftp 插入如下两行
auth required pam_userdb.so db=/etc/vsftpd/account
account required pam_userdb.so db=/etc/vsftpd/account
注意,64位os,pam相关so存放在/lib64/security/目录下,32位os,pam相关so存放在/lib/security/目录下
源码编译vsftp时,需要安装pam-devel,否则生成的vsftp不支持pam认证。
可以ldd vsftpd | grep libpam查看是否支持pam认证。
如果想取消虚拟用户功能,需要卸载pam-devel,重新编译vsftp。
本人测试时,编译支持了pam认证,即使注释掉配置文件vsftpd.conf中pam相关配置,也不能使用系统用户登录。
3. 增加虚拟用户配置(必需)
vim /etc/vsftpd/vuser/virtual
内容如下:
local_root=/mnt/virtual_ftpdata
write_enable=YES
download_enable=NO
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=NO
4.修改vsftpd.conf
增加:
guest_enable=yes #开启虚拟用户功能
guest_username=root #系统用户,虚拟用户的根目录对应于系统用户的根目录,不推荐root
pam_service_name=ftp #此处的名字对应于/etc/pam.d/目录下ftp配置的文件名
user_config_dir=/etc/vsftpd/vuser #虚拟用户配置目录
5. 重启vsftpd
以上是大致流程和关键节点操作,具体各配置项涵义略去不表,网上教程多,不容易出错,下面总结下本人配置时遇到的几个容易出错,且费时的问题。
1. pam认证支持,需要ldd vsftpd 查看是否有libpam,有则支持,无则不支持。
2. 根据测试结论:vsftpd一旦支持pam,系统用户就不能登录vsftp,如需取消pam,则需要在卸载pam-devel的情况下编译vsftpd。
3. vsftpd的根目录不能有写属性,否则vsftpd报错,chmod -w /mnt/virtual_ftpdata 去掉ftp目录的写属性,建议在去掉写熟悉前建立子目录,在子目录内存放数据。
4. 本人测试时,使用win7自带的ftp客户端命令测试,即使用quote PASV修改ftp的数据连接方向,也不能建立数据连接,后来测试发现是win7自带的防火墙策略导致,windows server 2003测试则未出现上述问题。这也说明win7的防火墙策略默认是比较严格的。