Vsftpd服务匿名用户和本地用户的访问控制
1、ftp介绍
ftp(File Transfer Protocol)文件传输协议,是互联网中最老牌的传输协议,比http早,今天一起来学习ftp。ftp的服务名称是vsftpd.service
,配置目录是/etc/vsftpd
,主配置文件是/etc/vsftpd/vsftpd.conf
,默认发布目录是/var/ftp
。在下面的学习中可能出现四种报错信息,他们分别代表的意思为:
报错信息 | 含义 |
---|---|
550 | 程序本身拒绝 |
553 | 文件系统权限限制 |
500 | 权限过大 |
530 | 认证失败 |
2、vsftpd安装及启用
前提是要有软件仓库(在真机172.25.254.77有共享仓库),首先分别给服务端和客户端安装软件,这里为了方便都是用的虚拟机b(ip为172.25.254.99),关闭selinux内核级加强型火墙,否则会影响实验效果,至于为什么后面会讨论,然后关闭防火墙,最后重启vsftpd服务。
dnf install vsftpd -y #服务端
dnf install lftp -y #客户端
vim /etc/selinux/config
SELINUX=disabled
systemctl disable --now firewalld
systemctl restart vsftpd
测试安装发布是否成功,由于默认是不允许匿名用户访问,所以要先在配置文件的第12行,修改anonymous_enable=YES
才可以进行测试,重启vsftpd服务,lftp 172.25.254.99
访问,此访问方式必须能列出资源才算访问成功,如下图,在使用完成后输入exit
或quit
退出lftp。
也可以使用浏览器来测试是否发布成功,如下图,成功了。
3、vsftpd匿名用户访问控制
当访问ftp服务时没有加入用户认证为匿名访问,加入了用户认证的是本地用户访问。
(1)登陆控制
默认是不允许匿名用户访问,需要配置文件的第12行,YES代表允许匿名用户访问,NO代表不允许匿名用户访问
重启服务,就可以匿名登陆了
(2)家目录控制
默认家目录是/var/ftp
,如果想更改家目录,可以修改配置文件如下。这里我们建立了/westosdir
来测试,配置文件中添加下面的一句anon_root=/westosdir
,重启服务,再次登陆lftp,显示的是westosdir中的文件了。
(3)上传控制
可以看到下图,默认情况下,我们上传文件,是550,被程序本身拒绝的。
修改配置文件,添加下面的语句,重启服务
现在再次测试,发现提示553,说明目录的权限不够,那么增加目录的权限如下图,
现在就成功了,如下图
注意:上传控制,下载控制,删除控制,目录建立控制,上传文件权限等操作必须在pub这个子目录下,不能直接在刚开始进去的共享目录操作。
(4)目录建立的控制
默认情况下,如下图,不能创建子目录,550,被程序本身拒绝的。
修改配置文件,添加下面的语句,重启服务
测试效果,成功创建子目录。
(5)下载控制
默认情况下,如下图,不能下载文件,550,被程序本身拒绝的。
修改配置文件,添加下面的语句,重启服务
测试效果,成功下载文件。
有同学有疑问吗,下载到哪里了?下载到了登陆lftp前的当前位置了。
(6)删除和重命名控制
默认情况下,如下图,不能删除文件和重命名。
修改配置文件,添加下面的语句,重启服务
测试效果,成功删除文件,成功重命名文件。
(7)匿名用户上传文件权限设定
默认情况下上传文件的权限是600
如果想修改上传文件的权限,要修改配置文件,添加下面的语句,重启服务
现在文件的权限应该是777-022-111=644,测试如下图,确实上传文件的权限是644了。
(8)匿名用户上传文件的用户身份设定
默认情况匿名用户上传文件的用户身份是ftp,那可以更改吗
要修改配置文件,添加下面的语句,重启服务,这两句表示允许更改上传文件的用户身份,更改为westos用户。
测试效果如下图,确实文件的用户身份变为了1000,1000就是westos用户,但是新的问题有了,这个文件的权限又恢复为600,说明允许更改上传文件的用户身份后,之前设定的umask就失效了
修改配置文件,添加下面语句,重启服务
测试如下图,文件的用户身份是westos,权限是644,都好了。
(9)登陆数量控制
默认情况下,不限制登陆的数量,假如我们想限制登陆的数量,修改配置文件,设定最多两个用户同时登陆。
测试如下,前两个都成功登陆,最后一个需要等待,有其他人退出最后一个人才可以登陆。
注意:必须把已经登陆的全部退出,重新登陆才能看到效果。
(10)上传速率控制
默认情况下是不限制上传速度的,为了测试,我们建立一个500M的大文件
上传这个大文件,测试速度,下图可以看到只用了两秒
如果想控制,可以修改配置文件,这里的单位是字节,即这里的限制速度最大为100K。
上传这个大文件,测试速度,如下图,基本在100K左右。
4、本地用户访问控制
使用本地用户访问时,可以有一系列的控制
(1)登陆控制
默认系统就允许本地用户登陆,因为配置文件中有这句
为了后面的测试,创建了westos和lee两个用户,密码都是westos。测试两个用户都可以登陆
useradd westos
useradd lee
echo lee | passwd --stdin westos
echo lee | passwd --stdin westos
lftp 172.25.254.99 -u westos
lftp 172.25.254.99 -u lee
(2)家目录控制
每个用户的默认家目录是/home/用户名
,比如/home/lee
和/home/westos
。如果想改变家目录,可以修改配置文件,添加这句,重启服务
测试效果,家目录成功变为/westosdir
。
(3)写权限控制
看下图,本地用户默认就可以写操作,包括上传,删除,下载。
这是因为配置文件中默认就有
该开关一旦关闭,不仅本地用户不可写,匿名用户也不可写。
(4)上传文件权限控制
如下图,上传文件的权限默认是644,如何更改呢?
修改配置文件,umask修改为077,重启服务
测试结果,上传文件的权限为600。
(5)用户登陆控制
控制黑名单的有两个子配置文件,/etc/vsftpd/ftpusers
是永久黑,即不论多会都是黑名单,/etc/vsftpd/user_list
是默认情况下的黑名单,但是/etc/vsftpd/vsftpd.conf
主配置文件里加了userlist_deny=NO
这句,表示现在开启白名单,现在/etc/vsftpd/user_list
里面的是白名单了。现在在/etc/vsftpd/ftpusers
中加入westos,
测试效果,westos用户不可以登陆,lee用户可以登陆。
(6)用户登陆白名单
默认情况下配置文件中没有userlist_deny
这句,即默认是黑名单模式,如果想改为白名单模式,修改配置文件,重启服务
现在开启了白名单模式,/etc/vsftpd/user_list
里写的就变为了白名单,不在名单中的用户不能登陆ftp,现在在/etc/vsftpd/user_list
中添加lee,意味着只有lee用户能访问,效果测试,lee可以,westos不可以。
(7)锁定用户到自己的家目录中
我们发现用户可以去根目录,也就是可以去任意的地方,权限太大了,
我们想锁定用户到自己的家目录中,不让他乱跑到其它地方,配置文件添加chroot_local_user=YES
,代表开启锁,那么所有的用户就都被锁到家目录了,无法出去。重启服务
测试效果,提示500,表示权限过大,所以chmod u-w /home/*
,去除写权限。
再次测试,如下图,虽然没有报错,但是确实不能去根下了。
(8)锁定用户到自己的家目录中的白名单
如果开启了锁,又开启了chroot_list_enable=YES
列表,表示白名单模式,那么只有chroot_list_file=/etc/vsftpd/chroot_list
这个列表里的用户允许出去,这里我列表里设置了lee。主配置文件修改如下,重启服务
测试效果,如下图,lee没被锁,可以去根。
westos用户锁了,不能去根。
(9)锁定用户到自己的家目录中的黑名单
如果chroot_local_user=NO
关闭锁功能,那么所有的用户都不被锁,可以去根下,这时再开启chroot_list_enable=YES
列表,表示该列表中的用户不允许出去,被锁在家目录,是黑名单,这里列表设置了lee。重启服务
测试效果,如下图,lee锁在家目录,不能去根
westos用户没锁,可以去根下
总结:你总体上是开着锁的,那么列表里的用户就是不被锁;你总体上是关着锁的,那么列表里的用户就是被锁。