2.用户禁锢、黑白名单 问题 沿用练习一,通过调整FTP服务端配置,实现以下目标: 1)将FTP用户禁锢在各自的宿主目录下,阻止其切换到其他的文件夹 2)通过/etc/vsftpd/ftpusers黑名单阻止用户 mike 访问 3)将/etc/vsftpd/user_list文件设为白名单,允许用户 lisi、mike 访问 4)分别测试匿名访问、以用户lisi和mike访问的结果 5)将 ftp 加入白名单,再测试匿名访问 方案 对于匿名用户ftp来说,默认已经启用禁锢(仅限于起始目录/var/ftp);而对FTP本地用户来说,默认并没有禁锢(不仅可以访问宿主目录,还可以跳转到其他目录),存在一定安全隐患。若要禁锢本地用户,只需设置 chroot_local_user = YES即可。 vsftpd服务提供了两个用户列表文件,其中 /etc/vsftpd/ftpusers 作为默认的黑名单使用,列在此文件内的用户将无法登入FTP。 而另一个文件 /etc/vsftpd/user_list只是一个用户名列表,根据配置参数 userlist_enable 的值是YES(默认)还是NO来决定是否启用此列表。一旦启用此列表文件以后,如果配置参数 userlist_deny的值是YES(默认)则此列表为黑名单(拒绝指定的用户),如果是NO则此列表作为白名单使用。 步骤 实现此案例需要按照如下步骤进行。 步骤一:禁锢FTP本地用户账号 1)验证未启用禁锢前的风险 以普通用户lisi登入后,起始目录位于/home/lisi/,但可以通过cd命令切换到服务器上的其他目录(比如/etc/),并下载有读取权限的文件(比如passwd),可能导致未授权的信息泄露。 [root@pc205 ~]# ftp 192.168.4.5 //连接FTP服务器 Connected to 192.168.4.5 (192.168.4.5). 220 (vsFTPd 2.2.2) Name (192.168.4.5:root): lisi //以FTP本地用户登录 331 Please specify the password. Password: //验证口令 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd //查看起始目录 257 “/home/lisi” //位于用户lisi的家目录 ftp> cd /etc/ //切换到其他目录 250 Directory successfully changed. ftp> get passwd //下载/etc/目录下的passwd文件 local: passwd remote: passwd 227 Entering Passive Mode (192,168,4,5,64,118). 150 Opening BINARY mode data connection for passwd (2122 bytes). 226 Transfer complete. 2122 bytes received in 4.5e-05 secs (47155.56 Kbytes/sec) ftp> quit //断开连接 221 Goodbye. [root@pc205 ~]# head -5 passwd //确认下载后的文件 root❌0:0:root:/root:/bin/bash bin❌1:1:bin:/bin:/sbin/nologin daemon❌2:2:daemon:/sbin:/sbin/nologin adm❌3:4:adm:/var/adm:/sbin/nologin lp❌4:7:lp:/var/spool/lpd:/sbin/nologin 2)修改vsftpd.conf配置文件,启用禁锢本地用户的设置 [root@svr5 ~]# vim /etc/vsftpd/vsftpd.conf … … chroot_local_user=YES //添加禁锢配置
[root@svr5 ~]# service vsftpd reload 关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定] 3)验证启用禁锢后的效果 再次以用户lisi登入FTP服务器,会发现起始目录(/home/lisi)已经被视为用户FTP会话的根目录,无法切换到/etc/等其他目录。 [root@pc205 ~]# ftp 192.168.4.5 //连接FTP服务器 Connected to 192.168.4.5 (192.168.4.5). 220 (vsFTPd 2.2.2) Name (192.168.4.5:root): lisi //以FTP本地用户登录 331 Please specify the password. Password: //验证口令 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd //查看起始目录 257 “/” //已经位于FTP根目录 ftp> ls //实际还是在lisi的家目录 227 Entering Passive Mode (192,168,4,5,239,27). 150 Here comes the directory listing. -rw-r–r-- 1 507 508 47884 Jan 13 08:01 install.log -rw-r–r-- 1 0 0 16 Jan 13 07:01 lisi.txt 226 Directory send OK. ftp> cd /etc //尝试切换到其他目录失败 550 Failed to change directory. ftp> quit //断开连接 221 Goodbye. 步骤二:使用FTP黑白名单 1)测试FTP黑名单文件/etc/vsftpd/ftpusers 添加一个用户mike,并设好密码: [root@svr5 ~]# useradd mike [root@svr5 ~]# echo 1234567 | passwd --stdin mike 更改用户 mike 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 将用户mike加入FTP黑名单: [root@svr5 ~]# vim /etc/vsftpd/ftpusers … … mike //添加到文件末尾,不要有多余空格 从客户机访问此FTP,尝试以mike登录时将会失败: [root@pc205 ~]# ftp 192.168.4.5 //连接FTP服务器 Connected to 192.168.4.5 (192.168.4.5). 220 (vsFTPd 2.2.2) Name (192.168.4.5:root): mike //尝试以用户mike验证 331 Please specify the password. Password: //输入正确口令 530 Login incorrect. Login failed. //因在黑名单内,此用户被拒绝登录 ftp> quit //断开连接 221 Goodbye. 2)将用户列表/etc/vsftpd/user_list作为FTP白名单 修改vsftpd服务配置,确认userlist_enable=YES,并在其下方添加一行新的配置语句userlist_deny=NO,然后重载服务: [root@svr5 ~]# vim /etc/vsftpd/vsftpd.conf … … userlist_enable=YES userlist_deny=NO //仅允许列表中的用户 [root@svr5 ~]# service vsftpd reload 关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定] 然后打开文件 /etc/vsftpd/user_list,清空原有记录,添加用户lisi、mike: [root@svr5 ~]# vim /etc/vsftpd/user_list //不要有多余空格 lisi mike 3)测试FTP白名单限制效果 以匿名用户ftp访问FTP服务器时,因不在白名单中,登录将会被拒绝: [root@pc205 ~]# ftp 192.168.4.5 Connected to 192.168.4.5 (192.168.4.5). 220 (vsFTPd 2.2.2) Name (192.168.4.5:root): ftp //匿名登录 530 Permission denied. //用户ftp不在白名单内,不接受验证 Login failed. ftp> quit 221 Goodbye. 以用户lisi访问FTP服务器时,此用户在白名单中且不在ftpusers黑名单中,因此是可以正常登录的: [root@pc205 ~]# ftp 192.168.4.5 Connected to 192.168.4.5 (192.168.4.5). 220 (vsFTPd 2.2.2) Name (192.168.4.5:root): lisi //以用户lisi登录 331 Please specify the password. Password: //输入正确口令 230 Login successful. //登入成功 Remote system type is UNIX. Using binary mode to transfer files. ftp> quit 221 Goodbye. 以用户mike访问FTP服务器时,此用户虽然在白名单中,但同时也在ftpuser黑名单中,因此尽管接受了用户名,但在提交密码后会被拒绝: [root@pc205 ~]# ftp 192.168.4.5 Connected to 192.168.4.5 (192.168.4.5). 220 (vsFTPd 2.2.2) Name (192.168.4.5:root): mike //以用户mike登录 331 Please specify the password. Password: //输入正确口令 530 Login incorrect. Login failed. //登入失败 ftp> quit 221 Goodbye. 修改vsftpd服务器的白名单文件,将匿名用户ftp、anonymous加入: [root@svr5 ~]# vim /etc/vsftpd/user_list //不要有多余空格 lisi mike ftp anonymous 再次从客户端匿名访问FTP服务器,将可以成功登入: [root@pc205 ~]# ftp 192.168.4.5 Connected to 192.168.4.5 (192.168.4.5). 220 (vsFTPd 2.2.2) Name (192.168.4.5:root): ftp //匿名登录 331 Please specify the password. Password: 230 Login successful. //因已在服务器白名单中,顺利登入 Remote system type is UNIX. Using binary mode to transfer files. ftp> quit 221 Goodbye.