Press "Enter" to skip to content

vsftpd配置虚拟用户

vsftpd的虚拟用户可以全部映射到一个真实的系统用户上, 对于有特殊权限要求的情况可以使用虚拟用户的方式. 这个方式的认证依赖于db4-utils, 需要使用它的db_load命令生成加密的认证文件. 本文基于CentoOS6 64bit.

1, 安装和配置vsftpd

$ yum install db4-utils vsftpd
$ cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.ori
$ touch /etc/vsftpd/chroot_list
$ vim /etc/vsftpd/vsftpd.conf  #根据情况修改如下内容,也可以全部COPY
anonymous_enable=NO
#必须启用本地用户,因为虚拟用户是映射到www这个本地用户来访问的
local_enable=YES
write_enable=YES
local_umask=022

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES

idle_session_timeout=600
data_connection_timeout=120

chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list

listen=YES

#指定新的pam认证文件
pam_service_name=ftp.vuser

#启用虚拟用户并将虚拟用户映射为本地www用户
#这两项配置可以写在这里,也可以写在下面的/etc/vsftpd/virtual_conf/user1里
#guest_enable=YES
#guest_username=www

#开启userlist,并禁止user_list文件中的用户登陆
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    #写入如下两行,如果是32位系统,把lib64改为lib
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, 为单个虚拟用户建立配置文件, 将虚拟用户映射为本地用户www, 每一行首尾都不能有空格, 否则会报错

$ 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客户端里尝试登陆.

一些说明:
1, 本文将所有的虚拟用户映射成了本地用户www, 请确保www的工作目录(/home/www)存在, 因为vsftp登陆时是会首先进入/home/www, 最后进入local_root指定的目录;
2, www用户需要同时对/home/www目录和local_root指定的目录有读写权限;
3, 新版vsftp禁止用户读写根目录, 因此使用FTP客户端登陆以后会发现其不能在根目录创建目录,这是正常的.

One Comment

  1. 飞猪 2016-11-08

    vim /etc/vsftpd/virtual_conf/user1这里加sudo也没办法保存是神马情况?

Leave a Reply

Your email address will not be published. Required fields are marked *