vsftpd安装及虚拟用户配置

时间:2021-07-11 06:01:00

服务器环境: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