目录
第一步:建立三个虚拟用户的目录作为其默认发布目录,并在目录下建立一个文件用于测试。
实验环境:
服务器主机:
nodeb:172.25.254.150;Selinux关闭;火墙开启(允许ftp通过);dnf安装设定完成
客户端主机:
nodec:172.25.254.151;Selinux关闭;dnf安装设定完成;安装lftp(ftp协议文本浏览器)
一、ftp介绍
ftp:file transfer proto #互联网中最老牌的文件传输协议
二、vsftpd安装及启用
vsftpd服务的开启及配置如下所示,配置完成后,客户机就可以通过ftp访问150号服务器了。
systemctl enable --now vsftpd #开机启动vsftpd服务
systemctl enable --now firewalld.service #开机启动火墙服务
firewalld-cmd --permanent --add-service=vsftpd #允许ftp服务通过火墙
firewalld-cam --reload #重新载入火墙配置
1、指定用户访问
2、不指定用户访问(匿名用户访问)
第一步:更改vsftp配置文件
将<anonymous_enable=NO>改为<anonymous_enable=YES>
第二步:重启vsftpd服务
systemctl restart vsftpd #重启vsftpd服务
第三步:匿名用户访问
也可以通过浏览器访问
默认的访问位置为服务器的</var/ftp/>目录下
三、vsftpd基本信息
服务名称 | vsftp.service |
配置目录 | /etc/vsftpd |
主配置文件 | /etc/vsftpd/vsftpd.conf |
默认发布目录 | /var/ftp |
报错信息 | 500 #权限过大 530 #认证失败 550 #程序本身拒绝 553 #文件系统权限限制(或文件已经存在) |
四、匿名用户访问控制
lftp 172.25.254.150 #当访问ftp服务时没有加入用户认证为匿名访问
lftp 172.25.254.150 -u westos #本地用户访问
1、常用参数控制
匿名用户登录控制 | anonymous_enable= YES | NO |
家目录控制 | anon_root=/westosdir |
上传控制 | anon_upload_enable=YES | NO |
目录建立控制 | anon_mkdir_write_enable=YES | NO |
下载控制 | anon_world_readable_only=NO #匿名用户可以下载不能读的文件 |
删除命令控制 | anon_other_write_enable=YES |
匿名用户上传文件权限设定 | anon_umask=555 #设定用户身份之后文件权限将不由此项决定 |
匿名用户上传文件的身份设定 | chown_upload=YES chown_username=lee chown_upload_mode=0644 |
登录数量控制(限流) | max_clients=2 |
上传速率控制(限速) | anon_max_rate=102400 |
2、实验
(1)匿名用户登录控制<anonymous_enable= YES | NO>
为“YES”时匿名用户可以登录,为“NO”时匿名用户不允许登录
(2)家目录控制<anon_root=/westosdir>
在配置文件中新加一行,将默认的发布目录更改为</westosfir>下,
测试结果如下图:
(3)上传控制<anon_upload_enable=YES | NO>和目录建立控制<anon_mkdir_write_enable=YES | NO>
在配置文件中取消这两行内容的注释(配置文件中这两行默认时注释掉的)
测试结果如下图:
需要先在服务主机中对根目录执行以下命令:
chmod 775 /westosdir #更改根目录权限,防止权限过大匿名用户无法访问
chmod 775 /westosdir/hello #更改根目录的下属目录的权限
chgrp ftp /westosdir/hello #更改根目录的下属目录的所有组
注意:如果更改完配置文件后,直接在客户机中上传文件,会发现550或500报错,原因是(1)根目录权限过大,且不允许直接对根目录下的进行更改。(2)子目录的权限和所有组不符合要求导致访问被拒。更改权限及所有组后,可以上传文件及创建目录了。
(4)下载控制<anon_world_readable_only=NO>和删除命令控制<anon_other_write_enable=YES>
在配置文件中新加两行内容(配置文件中默认这两行内容不存在)
测试结果如下:
执行下载命令后,会将文件下载在shell所在目录下。执行删除命令后,也可以删除文件,但是即使根目录的下属目录是满权限,匿名用户也无法删除,只能删除下属目录中的文件。
(5)匿名用户上传文件权限设定<anon_umask=111>
注意:当设定<chown_username>后,文件上传权限将不由此参数决定。
测试结果如下:
第一次由于上传权限为“111”,导致文件和目录的权限一样;第二次上传权限为“555”,可以看到文件和目录的权限都变大了。
(6)匿名用户上传文件的用户身份设定<chown_upload=YES><chown_username=westos><chown_upload_mode=0644>
更改配置文件(配置文件中本来就有这几行,取消注释即可)
测试结果如下图:
(7)登录数量限制<max_clients=2>和上传速率限制<anon_max_rate=102400>
注意:上传速率限制的单位是bit,102400bit=100K
更改配置文件:
测试结果如下:
更改最大访问限制数量后,只能在客户机中开启一个终端访问,超过一个就需要排队了。
更改上传速率前后对比:
在没有限制上传速率时,匿名用户的上传不受控制,如果遭受恶意攻击,会使服务器崩溃。
限制上传速率后,客户端的上传速度很慢,被限制在了100K左右。
五、本地用户的访问
实验环境:
1、登录控制
在目录</etc/vsftpd/>下有ftp服务的配置文件,其中“ftpusers”文件的的用户是任何情况下都无法访问,“user_list”文件中的用户是可以通过设置配置文件来改变为黑名单还是白名单。
测试结果如下:
用户westos不能通过ftp访问,用户lee可以访问
2、用户登录的黑白名单
(1)“user_list”黑名单
更改vsftpd服务的配置文件,在配置文件中默认存在两行设定,如下图所示。
vsftpd服务的配置目录</etc/vsftpd/>下有一个“user_list”文件,默认文件中的用户名禁止通过ftp功能登录,因此默认情况下“user_list”文件就是一个用户黑名单。
测试结果如下:
(2)“user_list”白名单
如果要使“user_list”成为用户白名单,就需要在配置文件中添加一行命令来禁止“user_list”的黑名单功能。
测试结果如下所示:
禁用了“user_list”的黑名单功能后,“user_list”就成为了一个白名单,只有出现在名单之中的用户可以通过ftp访问。
2、本地用户的其他配置
允许本地用户登录 | local_enable=NO | YES |
家目录控制 | local_root=/westos |
写权限设置 | write_enable=NO | YES |
上传文件权限控制 | local_umask=077 |
测试结果如下图:
更改完成后,访问本地用户的默认目录已从原本的用户家目录变成了指定的目录下。且上传的文件权限为700-111=600
注意:上传文件时,需要在服务器中更改目标目录的写权限,否则会导致上传失败。
3、锁定用户到自己的家目录中
(1)锁定用户到自己的家目录中
锁定用户到自己的家目录中 | chmod u-x /home/* chroot_local_user=YES |
锁定用户到自己的家目录中的白名单 | chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list |
锁定用户到自己的家目录中的黑名单 | chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list |
注意: </etc/vsftpd/chroot_list>这个文件默认不存在,需要自己建立
vsftpd服务的配置文件默认是不锁定用户家目录的,也就是说,使用本地用户登录以后可以访问到系统资源,这极大增加了系统的不安全性。所以就需要把该用户锁定在自己的家目录中。
配置文件中有这一行是注释掉的。
测试结果如下:取消注释后可以看到用户只能访问自己的家目录了。
(2)锁定用户到自己的家目录中的白名单
在指定目录下新建一个文件,文件中加入用户<westos>。然后在配置文件中做好如下配置(配置文件中都有,但是默认是注释掉的,取消注释即可)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
测试结果如下:名单中的用户<westos>可以访问家目录以外的文件,用户<lee>只能访问自己的家目录。
(3)锁定用户到自己的家目录中的黑名单
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
测试结果如下:名单中的用户<westos>只能访问自己的家目录,不在名单中的用户<lee>可以访问家目录以外的文件。
六、虚拟用户访问
1、建立虚拟用户过程
第一步:在vsftpd服务的配置目录下创建虚拟用户及密码
第二步:对虚拟用户及密码文件进行加密
db_load -T -t hash -f users users.db #加密认证文件
(-T=转换 -t=type -f=指定)
第三步:编写认证策略文件
第四步:更改vsftpd服务配置
pam_service_name=ftp_users #指定认证策略文件
guest_enable=YES #开启虚拟用户访问功能
guest_username=ftp #指定虚拟用户在ftp服务器上的用户身份
配置文件中默认没有这几行,所以需要新加。<pam_service_name=ftp_users>这里指定的文件指向的是上一步中的</etc/pam.d/ftp.users>
2、测试虚拟用户
在客户机中分别使用三个虚拟用户登录,都可以登录,默认发布位置是在</var/ftp/>目录下。
3、虚拟用户家目录的独立设定
第一步:建立三个虚拟用户的目录作为其默认发布目录,并在目录下建立一个文件用于测试。
第二步:更改虚拟用户家目录的所有组和读写权限
第三步:更改配置文件
第四步:测试
测试结果如下图所示,
七、用户配置独立
不同用户对应不同需求,所以对这些不同用户的配置也不一样。这就需要对单独用户进行上传/下载/连接/读写等等的限制。完成这种操作需要编写单独用户的配置文件。
第一步、编写单独用户的配置文件
mkdir /etc/vsftpd/user_config #创建存放单独用户配置文件的目录
vim /etc/vsftpd/user_config/user1 #编写用户user1的独立配置
第二步:更改vsfpd服务的配置文件
在vsftpd服务的配置文件中加上<user_config_dir=/etc/vsftpd/user_config>,就是指定单独用户配置文件目录的意思,出现在这个目录中的用户在登录时会按照目录中的用户配置文件对用户设定权限。
第三步:测试
对user1设定的是不允许上传文件,其他用户由于vsftpd配置文件的整体设定是可以上传文件的。
八、本章总结
1、ftp访问到的目录里,无法在根目录下创建文件及目录,只能在根目录下属目录进行上传操作。且下属目录的所有组和读写权限都要符合要求,否则匿名用户也不可更改。
2、锁定用户到自己的家目录中需要在服务主机上将家目录下的所有用户文件的权限<u-x>,否则客户机将文法访问。
3、本地用户和匿名用户的发布目录可以根据需求指定,虚拟用户的默认发布目录在</var/ftp/>下,要更改的话需要专门设定。
4、虚拟用户家目录更改时,一定要注意更改目录的所有组及读写权限,否则客户机将无法访问;除此之外,虚拟用户在vsftppd服务中家目录的设定是<local_root=/ftphome/$USER>,即是以本地用户的身份进行设定的,而不是匿名用户的身份。