从零搭建vsftpd

先吐槽一下这个工具,配置繁琐,限制规则复杂,报错信息不够详细,学起来吃力。

准备工作

[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

posted @ 2019-12-13 15:11  M1927  阅读(416)  评论(0编辑  收藏  举报