vsftpd ——Very Secure File Transfer Protocol Deamon
1.创建虚拟用户数据库
我们使用pam_userdb来验证虚拟用户的身份。而这需要使用一个db格式的账户密码文件。
首先创建一个vsftpd_login.txt的文本文件,奇数行定义账户名,偶数行定义上一行账户的密码。
比如:
#1 user1
#2 password1
#3 user2
#4 password2
#5 user3
#6 password3
接下来安装db-util程序,借此生成数据库文件。
执行命令创建虚拟用户数据库文件:
db_load -T -t -hash -f vsftpd_login.txt /etc/vsftpd_login.db
执行完命令就生成了数据库文件/etc/vsftpd_login.db。然后我们需要将这个文件权限设置下:
chmod 600 /etc/vsftpd_login.db
虚拟用户的数据库文件就创建完成了。
2.创建PAM文件
将文件/etc/pam.d/vsftpd备份:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
创建/etc/pam.d/vsftpd文件并加入以下两行:
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login
注1:这步设置很重要,否则会出现用户验证不通过进而无法登陆的情况。
注2:必须确保在所设置的路径下可以找到pam_userdb.so和vsftpd_login.db两个文件。
3.为虚拟用户创建文件目录
添加本地用户来映射虚拟用户:
useradd -d /home/ftpsite virtual
检查目录/home/ftpsite是否存在,若不存在,则创建。
创建文件/home/ftpsite/test.txt以便后面的测试。
4.创建配置文件
将原始配置文件/etc/vsftpd.conf备份:
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
创建配置文件/etc/vsftpd.conf并将以下参数添加进去:
#设定不允许匿名访问
anonymous_enable=NO
#设定本地用户允许访问
local_enable=YES
#设定虚拟用户使用与匿名用户的权限
virtual_use_local_privs=YES
#设定不允许写操作,全局参数。
write_enable=NO
控制匿名用户对文件(非目录)的上传权限
anon_upload_enable=NO
#控制匿名用户对文件夹的创建权限
anon_mkdir_write_enable=NO
#控制匿名用户对文件和文件夹的删除和重命名权限
anon_other_write_enable=NO
#设定chroot监狱
chroot_local_user=YES
#开启虚拟用户
guest_enable=YES
#虚拟用户映射的用户名
guest_username=virtual
#开启单机模式
listen=YES
#开启被动模式
pasv_enable=YES
#设置被动模式最小端口
pasv_min_port=10000
#设置被动模式最大端口
pasv_max_port=10999
#从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不再具有写权限。
#若vsftpd检查发现用户著目录仍具有写权限,则报该错误。激活下面参数可解决该问题。
#用命令chmod a-w /home/user去除用户主目录的写权限也可解决该问题。
allow_writeable_chroot=YES
5.重启vsftpd服务
重新启动vsftpd以使vsftpd.conf生效:
service vsftpd restart
确认vsfptd已经启动:
service vsftpd status
至此,虚拟用户配置完毕,即可进入测试阶段。
2020-05-09 22:17:59