vsftpd 3.x 禁止用户切换(访问)到上一级目录

在linux vsftpd中,默认情况下,用户连接以后,是可以通过 cd ../ 来切换到上一层目录,这个情况是很危险的,系统中的文件,只要是有r权限位的,都可以被下载,极大的带来了安全就隐患,这里以展示一下实验,并附上解决的办法

linux vsftpd,大家在做 vsftpd 的时候,不知道在有没有注意过一个问题,那就是用户可以切换到 ftp 根目录的上一层目录,而且这是默认的设置,不知道设计者这么做,考虑的是什么?有知道的朋友,还请留言,讨论一下。

在 FTP 登录完成后,都可以切换到系统根目录。这里我给大家来试验一下。这里命令行的方式来登录。

C:\Users\ainy>ftp ifool.me
连接到 ifool.me。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(ifool.me:(none)): ainy
331 Please specify the password.
密码:
230 Login successful.
ftp>
ftp>
ftp> cd /
250 Directory successfully changed.
ftp>
ftp>
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 May 14 20:08 bin
drwxr-xr-x 3 0 0 4096 Apr 03 20:07 boot
drwxr-xr-x 16 0 0 2840 Jul 26 14:28 dev
drwxr-xr-x 75 0 0 4096 Aug 16 14:39 etc
-rw-r--r-- 1 0 0 5684 Jun 03 01:40 header.php
drwxr-xr-x 7 0 0 4096 Aug 16 14:39 home
lrwxrwxrwx 1 0 0 31 Apr 03 20:06 initrd.img -> /boot/initrd.img-3.16.0-4-amd64
drwxr-xr-x 13 0 0 4096 May 14 19:47 lib
drwxr-xr-x 2 0 0 4096 Apr 03 20:05 lib64
drwx------ 2 0 0 16384 Apr 03 20:04 lost+found
drwxr-xr-x 2 0 0 4096 Apr 03 20:05 media
drwxr-xr-x 2 0 0 4096 Apr 03 20:05 mnt
drwxr-xr-x 2 0 0 4096 May 25 23:32 ntp
drwxr-xr-x 2 0 0 4096 Apr 03 20:05 opt
dr-xr-xr-x 102 0 0 0 Jul 26 14:25 proc
drwx------ 7 0 0 4096 Aug 16 10:16 root
drwxr-xr-x 17 0 0 540 Aug 15 23:51 run
drwxr-xr-x 2 0 0 4096 Jul 29 18:19 sbin
drwxr-xr-x 3 0 0 4096 Aug 15 23:51 srv
-rw-r--r-- 1 0 0 108296 Jun 03 01:42 style.css
dr-xr-xr-x 13 0 0 0 Jul 26 14:26 sys
drwxrwxrwt 11 0 0 4096 Aug 16 14:44 tmp
drwxr-xr-x 10 0 0 4096 Apr 03 20:05 usr
drwxr-xr-x 11 0 0 4096 May 14 22:35 var
lrwxrwxrwx 1 0 0 27 Apr 03 20:06 vmlinuz -> boot/vmlinuz-3.16.0-4-amd64
226 Directory send OK.
ftp: 收到 1634 字节,用时 0.19秒 8.74千字节/秒。
ftp>

可以看到,登入 ftp 后,直接 cd / 就切换到了系统的根目录,那么文件是否可以下载呢,再来试验一下

ftp>
ftp>
ftp> cd /etc/ssh/
250 Directory successfully changed.
ftp>
ftp> get sshd_config
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for sshd_config (2548 bytes).
226 Transfer complete.
ftp: 收到 2548 字节,用时 0.00秒 2548000.00千字节/秒。
ftp>

如此可见,用户可以切换到系统任意目录,也可以下载任意文件(当然前提是登录 ftp 的用户对相应的文件有读取权限),这样若是某个 用户 的密码过于简单,则有可能被黑客使用弱口令方式,攻击到 ftp ,这样的话,整个系统都在 默的眼下了,什么文件都可以拿到,因为 linux 系统里绝大部分文件,都是 755 的权限。

既然这样,那必须要禁止切换用户切换

C:\Users\ainy>ftp ifool.me
连接到 ifool.me。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(ifool.me:(none)): ainy
331 Please specify the password.
密码:
230 Login successful.
ftp>
ftp> pwd
257 "/home/ainy"
ftp>

禁止前,使用 pwd 命令,发现所以路径为真实的路径,当然这也是 vsftpd 默认的情况,默认本地用户的目录为自己的家目录。

打开 vsftpd.conf 配置文件,找到如下两行

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

去掉前面的 # 号,若没有这两行,可以手动添加,配置完成以后,创建chroot_list 文件,并重启vsftpd 服务

touch /etc/vsftpd.chroot_list

echo "ainy" > /etc/vsftpd.chroot_list

/etc/init.d/vsftpd restart

/etc/vsftpd.chroot_list 文件,代表的就是禁止哪些用户切换到上层目录,用户只在存在于这个文件里,则不能切换到上层目录,文件一行一个用户。

完成后再次重新登录 ftp 会发现这个用户登录不了了,报一个 500 的错误,具体为500 OOPS: vsftpd: refusing to run with writable root inside chroot()

这个错误我在网上找了一下,只需要在 vsftpd.conf 添加一行

allow_writeable_chroot=YES

即可解决500 OOPS: vsftpd: refusing to run with writable root inside chroot()的报错,配置文件改完后,再重启服务,然后再来试一下

C:\Users\ainy>ftp ifool.me
连接到 ifool.me。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(ifool.me:(none)): ainy
331 Please specify the password.
密码:
230 Login successful.
ftp>
ftp>
ftp> pwd
257 "/"
ftp>
ftp>
ftp> cd /
250 Directory successfully changed.
ftp>
ftp>
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp>
ftp> dir -a
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1004 1004 4096 Aug 16 14:39 .
drwxr-xr-x 2 1004 1004 4096 Aug 16 14:39 ..
-rw-r--r-- 1 1004 1004 220 Nov 13 2014 .bash_logout
-rw-r--r-- 1 1004 1004 3515 Nov 13 2014 .bashrc
-rw-r--r-- 1 1004 1004 675 Nov 13 2014 .profile
226 Directory send OK.
ftp: 收到 323 字节,用时 0.01秒 24.85千字节/秒。
ftp>

这次我们可以看到,登入 ftp 后的目录,就是根目录 / 不管再怎么切换,始终在自己的家目录里,不能切换到上层目录。

猜您喜欢