实现基于文件验证的 vsftpd 虚拟用户
1、创建用户数据库文件
-
创建文本文件,奇数行为用户名,偶数行为密码
[root@neo ~]# vim /etc/vsftpd/vusers.txt [root@neo ~]# cat /etc/vsftpd/vusers.txt hange raisecom jiege raisecom zhanglaoshi raisecom xiaoyanlaoshi raisecom
-
编码为 hash 格式,并进行权限修改
[root@neo ~]# cd /etc/vsftpd/ [root@neo vsftpd]# db_load -T -t hash -f vusers.txt vusers.db [root@neo vsftpd]# chmod 600 vusers.db [root@neo vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh vusers.db vusers.txt [root@neo vsftpd]# ll total 44 -rw-------. 1 root root 125 Oct 30 2018 ftpusers -rw-------. 1 root root 361 Oct 30 2018 user_list -rw-------. 1 root root 5143 Aug 13 23:59 vsftpd.conf -rw-------. 1 root root 5116 Aug 13 01:50 vsftpd.conf.bak -rwxr--r--. 1 root root 338 Oct 30 2018 vsftpd_conf_migrate.sh -rw-------. 1 root root 12288 Aug 14 00:04 vusers.db -rw-r--r--. 1 root root 74 Aug 14 00:03 vusers.txt
2、创建用户和访问 FTP 目录
-
创建用户,并修改家目录允许所有用户访问
[root@neo ~]# useradd -d /var/ftproot -s /sbin/nologin vuser [root@neo ~]# tail -n 1 /etc/passwd vuser:x:1000:1000::/var/ftproot:/sbin/nologin
[root@neo ~]# chmod +rx /var/ftproot/ [root@neo ~]# ll -d /var/ftproot drwxr-xr-x. 2 vuser vuser 62 Aug 14 00:15 /var/ftproot
-
CentOS 7 还需要执行以下操作
[root@neo ~]# chmod -w /var/ftproot/ # 把根文件的写权限去掉 [root@neo ~]# mkdir /var/ftproot/upload -v mkdir: created directory ‘/var/ftproot/upload’ [root@neo ~]# setfacl -m u:vuser:rwx /var/ftproot/upload # 其它用户可以进行读写 [root@neo ~]# ll -d /var/ftproot/upload/ drwxrwxr-x+ 2 root root 6 Aug 14 00:19 /var/ftproot/upload/
3、创建pam配置文件,制定用户数据库
[root@neo vsftpd]# vim /etc/pam.d/vsftpd.db
[root@neo vsftpd]# cat /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
如果大家保持同样的根目录和权限,可配置如下参数:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/var/ftproot/
4、修改vsftpd主配置文件,指定pam配置文件
[root@neo ~]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser # 所有虚拟帐号映射成 vuser 帐号
# 新创建文件的属主和数组都是 vuser
pam_service_name=vsftpd.db
5、设置SELinux
禁用SELinux 或者 setsebool -P ftpd_full_access 1
6、虚拟用户建立独立的配置文件
-
创建配置文件存放的路径
[root@neo ~]# mkdir /etc/vsftpd/vusers.d/ -pv mkdir: created directory ‘/etc/vsftpd/vusers.d/’
-
修改 vsftpd 的主配置文件,虚拟用户使用的配置文件目录
[root@neo ~]# vim /etc/vsftpd/vsftpd.conf # 如果每个用户权限保持一致的话,则不需配置此文件 user_config_dir=/etc/vsftpd/vusers.d/
-
创建各用户自已的配置文件(可自定义每个用户的读写权限,用户的根目录也可以单独定制)
[root@neo vusers.d]# vim zhanglaoshi [root@neo vusers.d]# cat zhanglaoshi anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES [root@neo vusers.d]# cat xiaoyanlaoshi local_root=/var/ftproot2 [root@neo vusers.d]# cat jiege local_root=/var/ftproot3 [root@neo vusers.d]# cat hange local_root=/var/ftproot4
7、进行验证
8、抓取用户名和密码
03:16:51.912805 IP 172.16.141.99.63582 > 172.16.141.252.21: Flags [P.], seq 1:19, ack 63, win 16636, options [nop,nop,TS val 2070224 ecr 610399081], length 18: FTP: USER zhanglaoshi
0x0000: e43a 6e0a 9b88 28d2 4470 abbe 0800 4500 .:n...(.Dp....E.
0x0010: 0046 01bf 4000 4006 c572 ac10 8d63 ac10 .F..@.@..r...c..
0x0020: 8dfc f85e 0015 83b5 ce42 8edd 1f8d 8018 ...^.....B......
0x0030: 40fc 3764 0000 0101 080a 001f 96d0 2461 @.7d..........$a
0x0040: f369 5553 4552 207a 6861 6e67 6c61 6f73 .iUSER.zhanglaos
0x0050: 6869 0d0a hi..
03:16:51.916103 IP 172.16.141.99.63582 > 172.16.141.252.21: Flags [P.], seq 19:34, ack 97, win 16628, options [nop,nop,TS val 2070225 ecr 610399092], length 15: FTP: PASS raisecom
0x0000: e43a 6e0a 9b88 28d2 4470 abbe 0800 4500 .:n...(.Dp....E.
0x0010: 0043 01c1 4000 4006 c573 ac10 8d63 ac10 .C..@.@..s...c..
0x0020: 8dfc f85e 0015 83b5 ce54 8edd 1faf 8018 ...^.....T......
0x0030: 40f4 a70d 0000 0101 080a 001f 96d1 2461 @.............$a
0x0040: f374 5041 5353 2072 6169 7365 636f 6d0d .tPASS.raisecom.
0x0050: 0a .