vsftpd的虚拟用户可以全部映射到一个真实的系统用户上, 对于有特殊权限要求的情况可以使用虚拟用户的方式. 这个方式的认证依赖于db4-utils, 需要使用它的db_load命令生成加密的认证文件. 本文基于CentoOS6 64bit.
1, 安装和配置vsftpd
$ yum install db4-utils vsftpd
$ vim /etc/vsftpd/vsftpd.conf #根据情况修改如下内容,也可以全部COPY
anonymous_enable=NO
#必须启用本地用户,因为虚拟用户是映射到www这个本地用户来访问的
local_enable=YES
write_enable=YES
#
local_umask=022
#anon_mkdir_write_enable=YES
#
dirmessage_enable=YES
#
xferlog_enable=YES
#
connect_from_port_20=YES
#
#chown_uploads=YES
#chown_username=whoever
#
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
#
idle_session_timeout=600
data_connection_timeout=120
#
#async_abor_enable=YES
#
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
#
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#
#ls_recurse_enable=YES
listen=YES
#listen_ipv6=YES
#指定新的pam认证文件
pam_service_name=ftp.vuser
#启用虚拟用户
guest_enable=YES
#将虚拟用户映射为本地www用户
guest_username=www
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
#不同虚拟用户配置文件的存放路径
user_config_dir=/etc/vsftpd/virtual_conf
2, 新建pam认证文件
$ vim /etc/pam.d/ftp.vuser
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
其中/etc/vsftpd/vsftpd_login是用户账号密码数据库文件
3, 建立虚拟用户数据库
$ vim /etc/vsftpd/vusers.list
用户名1
密码1
用户名2
密码2
建立帐户密码数据库文件
$ db_load -T -t hash -f /etc/vsftpd/vusers.list /etc/vsftpd/vsftpd_login.db
添加用户只需要在/etc/vsftpd/vusers.list中添加两行(账号和密码), 并再次生成加密认证文件, 不需要重启vsftpd服务.
4, 为单个虚拟用户建立配置文件
$ vim /etc/vsftpd/virtual_conf/user1
guest_enable=yes
guest_username=www
file_open_mode=0755
anon_umask=022
local_root=/home/wwwroot/user1
anon_world_readable_only=NO
#可以浏览和下载,yes只读
write_enable=YES
#可以上传(全局控制)
anon_mkdir_write_enable=YES
#允许创建目录
anon_other_write_enable=YES
#允许删除
anon_upload_enable=YES
然后即可在FTP客户端里尝试登陆.