vsftpd 虚拟用户配置说明

环境信息

  • Centos 7
  • Vsftpd 3.0.2

vsftpd 虚拟用户通过映射系统用户权限的方式,使虚拟用户具有和本地系统用户一样的权限,或者灵活的控制虚拟用户的权限(不和本地用户权限相同,不能高于本地权限),达到访问权限的灵活控制,同时防止大批 vsftpd 用户添加到系统账号库中,使系统用户管理变动臃肿。

创建虚拟用户映射的系统用户

系统用户 virtftp 拥有对 ftp 的读写权限,假设 ftp 根目录为/data/vsftpd/
创建 ftp 用户组和用户 virtftp,ftp 相关系统账号属于 ftp 组

groupadd ftp
useradd -d /data/vsftpd -M -s /sbin/nologin -g ftp virtftp
mkdir /data/vsftpd
chown -R virtftp:ftp /data/vsftpd
chmod -R 750 /data/vsftpd

ftp 根目录属于用户 virtftp,用户组为 ftp,设置权限 750,使 virtftp 用户拥有读写权限

创建虚拟用户的口令库

需要使用 db_load 命令根据原始口令文件( /etc/vsftpd/passwd.txt )生成 db 口令库文件,原始文件中奇数行为用户名,偶数行为密码

db_load -T -t hash -f /etc/vsftpd/passwd.txt /etc/vsftpd/passwd.db
chmod 600 /etc/vsftpd/passwd.db

修改 pam 认证文件/etc/pam.d/vsftpd,只保留以下 2 行
或者重新创建文件/etc/pam.d/vsftpd_vu,并在 vsftpd.conf 中配置 pam_service_name=vsftpd_vu )

vsftpd_vu
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/passwd

db=/etc/vsftpd/passwddb_load 生产的文件,不要带后缀 .db
如果认证发生错误,可检查日志文件: /var/log/secure

配置 vsftpd 启用虚拟用户

修改 vsftpd 配置文件,默认为 /etc/vsftpd/vsftpd.conf vsftpd.conf常用配置文件说明

vsftpd.conf
# 使用虚拟用户功能,必须允许本地用户
local_enable=YES

# 启用虚拟用户配置,所有非匿名用户登录将视为游客,将被映射为guest_username
guest_enable=YES

# 主配置文件中必需有,否则报错
# 500 OOPS: vsftpd: cannot locate user specified in 'guest_username':ftp
guest_username=virtftp

# 虚拟用户独立配置文件目录,每个虚拟用户有一个同名的配置文件于此目录下
user_config_dir=/etc/vsftpd/virtual_user_conf

配置虚拟用户配置文件

虚拟用户配置文件位于 vsftpd.conf 配置 user_config_dir 指定的目录下,每个用户一个配置文件,配置文件和用户名同名
用户名,配置文件名,必须和口令文件中的用户名保持一致

user1
# 指定虚拟用户根目录
local_root=/home/ftpsite/user1

# 虚拟用户是和本地用户有相同权限;NO:虚拟用户和匿名用户权限相同
virtual_use_local_privs=YES

# 虚拟用户对应的系统用户
guest_username=virtftp

# 虚拟用户将被锁定在自己的宿主目录
#chroot_local_user=YES

write_enable=YES
#lock_upload_files=NO
anon_umask=022
#download_enable=NO
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#chown_uploads=YES
#chown_username=nono
#allow_anon_ssl=YES

#force_anon_logins_ssl=YES
#force_anon_data_ssl=YES
#cmds_allowed=CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,RETR,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

常用配置说明

virtual_use_local_privs 参数说明
virtual_use_local_privs=YES 时,虚拟用户和本地用户有相同的权限;
virtual_use_local_privs=NO 时,虚拟用户和匿名用户有相同的权限,默认是 NO。
virtual_use_local_privs=YESwrite_enable=YES 时,虚拟用户具有写权限(上传、下载、删除、重命名)。
virtual_use_local_privs=NOwrite_enable=YESanon_world_readable_only=YESanon_upload_enable=YES 时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
virtual_use_local_privs=NOwrite_enable=YESanon_world_readable_only=NOanon_upload_enable=NO 时,虚拟用户只能下载文件,无其他权限。
virtual_use_local_privs=NOwrite_enable=YESanon_world_readable_only=NOanon_upload_enable=YES 时,虚拟用户只能上传和下载文件,无其他权限。
virtual_use_local_privs=NOwrite_enable=YESanon_world_readable_only=NOanon_mkdir_write_enable=YES 时,虚拟用户只能下载文件和创建文件夹,无其他权限。
virtual_use_local_privs=NOwrite_enable=YESanon_world_readable_only=NOanon_other_write_enable=YES 时,虚拟用户只能下载、删除和重命名文件,无其他权限。