服务器环境:CentOS Linux release 7.4 3.10.0-693.5.2.el7.x86_64
服务器软件:vsftpd-3.0.2
FTP工作模式:主动模式和被动模式
主动模式
被动模式
vsftpd的配置文件
/etc/vsftpd/vsftpd.conf 主配置文件
/etc/vsftpd/ftpusers 黑名单
/etc/vsftpd/vsftpd_conf_migrate.sh 迁移脚本
/etc/vsftpd/user_list 用户列表,与userlist_enbale和userlist_deny选项密切相关,详见http://blog.csdn.net/bluishglc/article/details/42273197
安装vsftpd
# yum -y install vsftpd
安装libdb-utils
安装Berkeley DB工具,用于生成虚拟用户认证文件
# yum -y install libdb-utils #CentOS7是libdb-utils # yum -y install db4 db4-utils #CentOS6是db4-utils
宿主用户
创建宿主用户,即guest_username,所有虚拟用户都是映射宿主用户的目录权限。
# useradd -d /var/vsftp -s /sbin/nologin vsftp
主配置文件
# vi /etc/vsftpd/vsftpd.conf #关闭匿名访问 anonymous_enable=NO #启用本地系统用户,包括虚拟用户 local_enable=YES #允许执行FTP命令,如果禁用,将不能进行上传、下载、删除、重命名等操作 write_enable=YES #本地用户umask值 local_umask=022 dirmessage_enable=YES #启用日志 xferlog_enable=YES xferlog_std_format=YES #关闭ftp-data端口,相当于不使用主动模式 connect_from_port_20=NO #限制用户不能离开FTP主目录,启用并设置例外用户清单 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list #使用ipv4进行监听 listen=YES listen_ipv6=NO #pam认证文件名称,位于/etc/pam.d/ pam_service_name=vsftpd #启用全局用户例外清单 userlist_enable=YES #启用tcp封装 tcp_wrappers=YES
#虚拟用户权限是否与本地用户相同。为NO时,将与匿名用户的权限相同,在每个虚拟用户配置文件里设置匿名用户的选项等于虚拟用户的权限
virtual_use_local_privs=NO #启用guest后,所有非匿名用户将映射到guest_username进行访问,包括本地系统用户也不能使用,并且转换成一个虚拟用户,与其他虚拟用户的配置方法一样 guest_enable=YES guest_username=vsftp #虚拟用户配置文件目录 user_config_dir=/etc/vsftpd/vuser_conf
#启用pasv模式
pasv_enable=YES
pasv_min_port=33000
pasv_max_port=34000
主配置文件可参考:man vsftpd.conf或https://security.appspot.com/vsftpd/vsftpd_conf.html
chroot_list文件
chroot()会检查chroot_list文件
# touch /etc/vsftpd/chroot_list
虚拟用户列表
奇行为用户名,偶行为密码
# vi /etc/vsftpd/vuser
ftpserver 111111
虚拟用户认证文件
# db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
# chmod 600 /etc/vsftpd/vuser.db
虚拟用户认证配置
注释掉其他本地用户认证的内容,因为启用了guest_enable后,本地用户将失效,所有非匿名用户变成虚拟用户
# cp /etc/pam.d/vsftpd{,.bak}
# vi /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
虚拟用户配置文件
# mkdir /etc/vsftpd/vuser_conf/ # vi /etc/vsftpd/vuser_conf/ftpserver #文件名与对应FTP虚拟用户一致
local_root=/var/vsftp/ftpserver #虚拟用户主目录,用户和组必须指定为宿主用户vsftp #vsftpd主配置文件中已规定虚拟用户权限与匿名用户一致,因此以下针对匿名用户的权限配置即为虚拟用户的权限 anon_umask=077 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
虚拟用户主目录和权限
最新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录,赋予700权限。所有上传、下载、删除、重命名等操作只能在子目录中进行
# mkdir -p /var/vsftp/ftpserver/newdir # chown -R vsftp.vsftp /var/vsftp # chmod -R 500 /var/vsftp
# chmod -R 700 /var/vsftp/newdir
SELINUX
# setsebool -P ftpd_full_access on
防火墙
# iptables -I INPUT -p tcp --dport 21 -j ACCEPT #FTP连接端口 # iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT #pasv模式下的随机端口 # iptables-save >/etc/sysconfig/iptables #保存防火墙配置
重启
# systemctl restart iptables.service
# systemctl restart vsftpd.service