vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。
本次搭建ftp服务器,采用虚拟用户登录;所谓虚拟用户就是没有使用真实的系统用户,只是通过映射到真实的账户和设置权限的目的。虚拟用户不能登录操作系统。
系统环境
CentOS 6.9
SELinux disabled
软件安装
1
| yum -y install db4 db4-utils vsftpd
|
创建虚拟用户的宿主用户
1
| useradd -u 600 -d /data/ftproot -s /sbin/nologin slvftp
|
创建用户名密码文件
1 2 3 4 5
| vim account.txt slftp1 xxxxxx slftp2 yyyyyy
|
生成虚拟用户认证文件
1 2 3 4
| db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db #安全原因,修改认证文件权限 chmod 600 /etc/vsftpd/account.db #执行完此操作,建议删除account.txt
|
配置认证文件
1 2 3 4
| vim /etc/pam.d/vsftpd.sl auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/account account required /lib64/security/pam_userdb.so db=/etc/vsftpd/account #我这里是64位的操作系统,写的是/lib64,如果是32位的操作系统,写成/lib即可
|
修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| vim /etc/vsftpd/vsftpd.conf #虚拟用户权限与匿名用户权限相同,虚拟用户权限单独设定 virtual_use_local_privs=NO #服务器独立运行 listen=YES #设定不允许匿名访问 anonymous_enable=NO #设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问 local_enable=YES #使用户不能离开主目录 chroot_list_enable=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list #设定支持ASCII模式的上传和下载功能 ascii_upload_enable=YES ascii_download_enable=YES #PAM认证文件名。PAM将根据/etc/pam.d/vsftpd.sl进行认证 pam_service_name=vsftpd.sl #设定启用虚拟用户功能 guest_enable=YES #指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了 guest_username=slvftp #设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名) user_config_dir=/etc/vsftpd/user_config/ #配置vsftpd日志(可选) xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/xferlog dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log #开启被动(PASV)模式 pasv_enable=yes pasv_min_port=10240 pasv_max_port=10250
|
新建chroot_list空文件
1
| touch /etc/vsftpd/chroot_list
|
创建虚拟用户的配置目录文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| mkdir /etc/vsftpd/user_config/ #虚拟用户配置文件名必须与用户名一致 vim /etc/vsftpd/user_config/slftp1 guest_username=slvftp #虚拟用户的宿主用户 local_root=/data/ftproot/slftp1 #虚拟用户根目录 local_enable=YES write_enable=YES #写权限 anon_umask=022 anon_world_readable_only=NO anon_upload_enable=YES #上传权限 anon_mkdir_write_enable=YES #创建文件夹权限 anon_other_write_enable=YES #其他权限 ############## vim /etc/vsftpd/user_config/slftp2 guest_username=slvftp local_root=/data/ftproot/slftp2 local_enable=YES write_enable=YES anon_umask=022 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
|
创建ftp根目录
1 2 3
| mkdir -pv /data/ftproot/slftp{1,2} chmod 700 -R /data/ftproot chown slvftp.slvftp -R /data/ftproot
|
重启vsftp服务
1
| /etc/init.d/vsftpd restart
|
防火墙开放端口
1 2 3 4 5 6 7 8 9
| iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT #主要是下边这两条 iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10240:10250 -j ACCEPT #所有允许规则应该在这条之前 iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
|
测试
1 2
| yum -y install lftp lftp user:passwd@127.0.0.1
|
参考文档:https://dumplings.cc/bu-shu-vsftpyu-pei-zhi-xu-ni-yong-hu-deng-lu/