vsftpd高级用法之虚拟用户配置


OS:centos6.8

vsftpd版本:2.2.2


需求:需要2个ftp用户访问不同的根目录,其他的访问ftp默认目录。

2个用户为:test1、test2

首先安装vsftpd,然后配置文件如下:

vsftpd.conf:

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

listen=YES

ftpd_banner=”welcome test Ftp Server.”

pam_service_name=vsftpd  #设置PAM使用的名称,该名称就是/etc/pam.d/目录下vsfptd文件的文件名

userlist_enable=YES

userlist_deny=NO

tcp_wrappers=YES


guest_enable=YES   #表示是否开启vsftpd虚拟用户的功能,yes表示开启,no表示不开启。

guest_username=wwwroot

user_config_dir=/etc/vsftpd/vuser_conf  #指定每个虚拟用户账号配置目录

pasv_enable=YES

pasv_min_port=40000

pasv_max_port=40080

pasv_promiscuous=YES


创建虚拟用户的映射系统用户:useradd -d /etc/nginx/conf.d/ -s sbin/nologin wwwroot

创建虚拟用户配置目录:

mkdir /etc/vsftpd/vuser_conf

 

创建虚拟用户文件,把这些用户名和密码存放在一个文件中。该文件内容格式是:用户名占用一行,密码占一行。如下:

[root@localhost vsftpd]# cat /etc/vsftpd/login.txt 
test1
testone
test2
testtwo

 

这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,所以我们需要使用db_load命令生成db口令数据库文件,命令如下:

db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件。如下图:

ftp

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

 

auth是指对用户的用户名口令进行验证。

accout是指对用户的帐户有哪些权限哪些限制进行验证。

再后面的/lib64/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。

注意该函数会根据系统的位数而所在位置不同。

如果是32bit系统,该文件所在位置是/lib/security/pam_userdb.so

如果是64bit系统,该文件所在位置是/lib64/security/pam_userdb.so

 

最后db=/etc/vsftpd/login则指定了验证库函数将到这个指定的数据库中调用数据进行验证。其实该文件指的是/etc/vsftpd/login.db文件。

 

注意:db=/etc/vsftpd/login格式是这样的,去掉.db后缀。

 

PAM配置完毕后,我们现在开始创建虚拟用户与系统用户对应的文件。切换到/etc/vsftpd/vuser_conf目录下,并创建test1文件。注意该文件名称一定要与login.txt中的虚拟用户要对应。比如现在login.txt文件有test1用户,那么在 /etc/vsftpd/vuser_conf目录下创建一个文件名为test1的文件。

[root@localhost vsftpd]# cat /etc/vsftpd/vuser_conf/test1

local_root=/etc/nginx/conf.d/upload/   #虚拟用户登录后的新的根目录
# virtual_use_local_privs=YES   #虚拟用户和本地用户有相同的权限,默认是NO.

anon_umask=022

anon_world_readable_only=NO #开放bobyuan的下载权限。注意这个地方千万不能写成YES,否则bobyuan将不能列出和下载子目录的文件。

write_enable=YES #开放test1的写权限

anon_world_readable_only=NO #开放test1的下载权限

anon_upload_enable=YES #开放test1的上传权限

anon_mkdir_write_enable=YES #开放test1创建目录的权限

anon_other_write_enable=YES #开放test1删除和重命名的权限


以上配置完毕后,启动vsftpd服务完成。

如果启用了黑白名单,那么必须把虚拟用户添加进白名单中。

测试test1、test2 ftp用户均可以正常登录,对应的根目录不同,均有创建和删除、上传权限。


      切记:虚拟用户对目录文件的权限是建立在映射后的本地系统用户对其权限的基础上的。比如说,虚拟宿主用户wwwroot对某目录没有写权限,即使vuser_conf/test1权限配置文件赋予了写权限,test1仍然不能写入,创建,上传,修改操作


关于chroot:

    1. chroot_local_user

    2. chroot_list_enable

    3. chroot_list_file

可以通过如下两种方法来设置chroot,从而杜绝上述不安全的情况发生:

(1)设置所有的本地用户执行chroot,只要将/etc/vsftpd/vsftpd.con文件中的chroot_local_ user值置为YES,即             chroot_local_user=YES。

(2)设置指定的用户执行chroot,按照如下方法进行设置:

chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

设置后,只有/etc/vsftpd.chroot_list文件中指定的用户不能切换出目录。

 


补:

OS:centos7

vsftpd版本:3.0.2

vsftpd服务可以工作在2种模式下:一种是启用了listen=YES并禁用了listen_ipv6=YES(经测试两者同时开启服务会起不来)的标准服务模式;一种是xinetd超级服务来管理的模式,经测试,此模式下vsftpd.conf中必须设置listen=NO,listen_ipv6=NO才能正常访问vsftpd服务。