先吐槽一下这个工具,配置繁琐,限制规则复杂,报错信息不够详细,学起来吃力。
准备工作
[root@vsftp-server ~]# mkdir /data/ #创建ftp目录
[root@vsftp-server ~]# useradd -s /sbin/nologin -d /data/vsftp localUser #虚拟用户将被映射为本地系统用户
[root@vsftp-server ~]# cat /etc/shells #末尾追加/sbin/nologin解决localUser登录530问题
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/nologin
[root@vsftp-server ~]# ll /data/vsftp/ -d
drwx------ 2 localUser localUser 62 Dec 1 17:50 /data/vsftp/
安装客户端和服务端
[root@vsftp-server ~]# yum install -y vsftpd ftp
修改配置
[root@vsftp-server ~]# mv vsftpd.conf vsftpd.conf.ori
[root@vsftp-server ~]# vim /etc/vsftpd/vsftpd.conf
#是否启用匿名免密账号
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
#是否允许本地系统用户登录
local_enable=YES
local_root=/data/vsftp/
local_umask=022
#是否允许虚拟用户账号密码登录
guest_enable=YES
#虚拟账号映射为本地系统用户
guest_username=localUser
#虚拟用户使用本地用户权限
virtual_use_local_privs=YES
write_enable=YES
dirmessage_enable=YES
connect_from_port_20=YES
chown_uploads=NO
user_config_dir=/etc/vsftpd/v_conf.d
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to vsFTP service.
allow_writeable_chroot=YES
#是否允许本地用户访问上级目录
chroot_local_user=YES
#是否启用目录访问限制列表
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=YES
#启用用户限制名单
userlist_enable=YES
#deny名单属性:YES为黑名单,NO为白名单
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
pam_service_name=vsftpd
虚拟用户登录认证
[root@vsftp-server vsftpd]# vim /etc/vsftpd/v_user_list
virtualUser1
123123
virtualUser2
123123
生成认证数据库,每次修改v_user_list都要重新生成一遍
[root@vsftp-server vsftpd]# db_load -T -t hash -f /etc/vsftpd/v_user_list /etc/vsftpd/v_u.db
[root@vsftp-server vsftpd]# chmod 600 /etc/vsftpd/virtusers.db
配置PAM认证规则,即时生效,不必重启vsftpd
参考资料:https://www.cnblogs.com/z-books/p/4329676.html
[root@vsftp-server vsftpd]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #拒绝黑名单用户
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/v_u #验证虚拟用户身份
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/v_u #验证虚拟用户账号密码
#认证用到的数据库文件的文件名使用/etc/vsftpd/v_u,而不是/etc/vsftpd/v_u.db,更不是v_user_list
auth include password-auth #此配置将影响本地用户登录
account include password-auth #此配置将影响本地用户登录
auth required pam_shells.so #此配置将影响本地用户登录
session include password-auth
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
注意以上配置有先后顺序,顺序更改可能导致认证失效
用户权限方面,chroot_list和白名单user_list,都是即时生效,不必重启服务
[root@vsftp-server ~]# vim /etc/vsftpd/user_list
localUser
virtualUser1
virtualUser2
[root@vsftp-server ~]# vim /etc/vsftpd/chroot_list
#允许本地用户访问上级目录
localUser
#不允许虚拟用户访问上级目录
#virtualUser1
#virtualUser2
为每个虚拟用户单独指定一个家目录,未指定家目录的虚拟用户将出现登录异常
[root@vsftp-server vsftpd]# mkdir /etc/vsftpd/v_conf.d
[root@vsftp-server vsftpd]# vim /etc/vsftpd/v_conf.d/virtualUser1
local_root=/data/vsftp/virtualUser1
write_enable=YES
[root@vsftp-server vsftpd]# vim /etc/vsftpd/v_conf.d/virtualUser2
local_root=/data/vsftp/virtualUser2
write_enable=YES
启动服务并验证结果
[root@vsftp-server ~]# systemctl restart vsftpd
注意localUser是在chroot允许列表里的,可以访问上级目录
排错
异常日志:
[root@vsftp-server ~]# tailf /var/log/secure
本地用户登录530 Login incorrect异常:
auth required pam_shells.so 配置项的含义为仅允许用户的shell为 /etc/shells 文件内的shell命令时,才能够成功
参考:https://blog.csdn.net/hahahaxiaoyu/article/details/100582853