虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。其配置步骤如下:

一、修改/etc/vsftpd/vsftpd.conf 文件

具体内容为:

 1[root@ /etc/vsftpd]cat vsftpd.conf
 2anonymous_enable=NO
 3listen=YES
 4listen_port=7722
 5###########set pasv############
 6pasv_enable=YES
 7pasv_min_port=9921
 8pasv_max_port=9927
 9#################for vuser##############
10guest_enable=YES
11guest_username=www
12pam_service_name=vsftpd.vuser
13user_config_dir=/etc/vsftpd/vsftpd_user_conf
14local_root=/data1
15anon_umask=022
16anon_other_write_enable=YES
17####################################
18local_enable=YES
19write_enable=YES
20local_umask=022
21anon_upload_enable=NO
22anon_mkdir_write_enable=YES
23dirmessage_enable=YES
24xferlog_enable=YES
25connect_from_port_20=YES
26xferlog_std_format=YES
27userlist_enable=YES
28tcp_wrappers=YES
29log_ftp_protocol=YES
30dual_log_enable=YES
31max_clients=200
32max_per_ip=20

这里出于安全考虑我将默认监听端口21改成了7722 ,被动连接的端口为9921-9927 。这里所有的虚拟用户对应的系统真实用户是www ,对应的pam配置文件的名字为vsftpd.vuser 。虚拟用户对应的配置文件为/etc/vsftpd/vsftpd_user_conf 。

注:出于安全考虑vsftp.conf文件的权限需改成600,即chown 600 vsftpd.conf;

二、虚拟用户配置文件

现以新建test用户为例,在虚拟用户配置文件目录新建test文件,内容如下:

1[root@ / ]cat /etc/vsftpd/vsftpd_user_conf/test
2local_root=/data1/NFS/wwwroot
3anon_world_readable_only=NO
4write_enable=YES
5anon_upload_enable=YES
6anon_mkdir_write_enable=YES
7anon_other_write_enable=YES

三、修改创建pam配置文件vsftpd.vuser

1[root@ / ]cat /etc/pam.d/vsftpd.vuser
2auth    required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_login
3account required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_login

注: 出于安全考虑,这里还可以考虑增加Google Authenticator的pam模块。

四、生成密码文件

生成虚拟用户的db数据密码库,需要用到工具db_load,其在db4_utils包里,如下:

1[root@ / ]whereis db_load
2db_load: /usr/bin/db_load
3[root@ / ]rpm -qf /usr/bin/db_load
4db4-utils-4.7.25-17.el6.x86_64

通过命令生成密码数据文件,出于安全考虑,这里将其更改权限为600

1[root@ / ]cat  /etc/vsftpd/account.txt
2test
3123456
4yang
5aaabbbccc
6zhu
7pppef@123
8[root@ / ]db_load -T -t hash -f /etc/vsftpd/account.txt /etc/vsftpd/vsftpd_login.db
9[root@ / ]chmod 600 /etc/vsftpd/vsftpd_login.db

五、iptables配置

iptables中增加如下内容,并重启iptables

1-A INPUT -p tcp -m state --state NEW -m tcp --dport 7722 -j ACCEPT
2-A INPUT -p tcp -m state --state NEW -m tcp --dport 9921:9927 -j ACCEPT

增加完成后/etc/init.d/iptables restart生效。

以上五步都操作完成后,重启vsftpd 生效。至此,就可以通过vsftpd中配置的虚拟用户进行连接了。