2.3 Vsftpd服务的部署及优化

什么是FTP

文件传输协议(英语:File Transfer Protocol,缩写:FTP),互联网中最老牌的文件传输协议.
与http相似可也用于文件的发送和接受.

实验环境部署

FTP相关软件分为发送端和接收端,本文需要分别对服务器和客户端机器进行部署(当然实际上在同一台机器上也可以实现,我也是这么做的).

##双端安装
dnf search ftp
dnf install vsftpd lftp -y

##防火墙增加ftp允许规则并检查
firewall-cmd --permanent --add-service=ftp
systemctl restart firewalld.service 

##临时关闭SELinux
vim /etc/selinux/config

此时你发现你无法使用匿名用户登录FTP服务器,因为主配置文件中默认是不允许这样的.

VsftpdFTP的一种服务端版本,其基本信息如下.

服务名称		vsftpd.service
配置目录		/etc/vsftpd
主配置文件	/etc/vsftpd/vsftpd.conf
默认发布目录	/var/ftp
报错信息报错含义
550程序本身拒绝
553文件系统权限限制
500权限过大
530认证失败

FTP以其安全性著称,当发布目录本身的权限过大时会被认为不安全,同样会出现500报错而不允许使用.

主配置文件参数

匿名用户访问与权限控制

通过修改Vsftpd的主配置文件我们可以达成我们想要的效果开关,如匿名用户的权限设置/本地用户的权限设置等等.

##修改主配置文件中匿名用户相关的参数后重启服务
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd

##重新进行匿名登陆并查看状态
lftp 172.25.254.136
##能够查看目录下内容,登陆成功
lftp 172.25.254.136:~> ls
drwxr-xr-x    2 0        0               6 Feb 17  2020 pub

##修改匿名登陆文件目录的权限和所有组
chmod 775 /var/ftp/pub/
chgrp ftp /var/ftp/pub/

匿名用户登陆参数匿名登陆结果匿名默认目录
多样匿名权限
匿名提权修改匿名用户家目录设置匿名上传保留权限保留权限验证修改匿名用户上传文件的用户身份身分验证

修改Pub目录权限的原因

当FTP主发布目录本身的权限过大时会被认为不安全,出现500报错禁止相关操作,因此我们需要对实际存储文件的pub目录进行权限修改.
匿名用户登录的操作默认由本地用户ftp完成,因此ftp用户必须拥有对pub目录的操作权限,设置目录所有组为ftp,设置目录权限为775即可.

本地用户的访问

用于登陆FTP服务器的用户必须有密码,没有密码的用户无法用于登录.

write_enable控制的是FTP服务器的写权限,当设置为不可写后不仅是本地用户不能上传文件,匿名用户同样也无法上传文件.

ftpusersuser_list都是用户控制的黑名单,被加入黑名单的用户无法登陆FTP服务器.前者为永久黑名单,后者为临时用户黑名单,前者的优先级更高.

但如果设置了userlist_denyNO,则user_list名单的功能变成了白名单,只有加入名单中的用户可以登陆FTP服务器.

如果一个用户同时出现在了ftpusers和白名单模式的user_list中时,他依旧无法登陆,因为永久黑名单ftpusers的优先级更高.
白名单

本地用户登陆时,默认登陆到自己的家目录中.但仍可以通过cd跳转到上级目录.从系统安全性角度这显然是极不安全的.通过设置相关参数可以将本地用户锁定在自己的家目录中.

##将本地家目录中的用户写权限去除,避免FTP因目录权限过大拒绝操作
chmod u-w /home/*

##锁定用户到自己的家目录中
chroot_local_user=YES

执行以上操作后,用户登陆到FTP服务器后只能在自己的家目录中,而无法跳转到上级目录.

锁定在家目录

默认登陆到家目录本地用户的功能限制关闭写权限的验证只允许匿名使用修改本地用户保留权限

其他常用参数

匿名用户上传文件权限的设定中,所设定的anon_umask为保留权限,根据保留权限可以推导出目录权限和文件权限.而匿名用户上传文件的用户身份中chown_upload_mode则直接设置了上传文件的权限,两者需要进行区分记忆.

当设置chown_upload_mode后,所上传文件的权限不由anon_umask设置.

max_clients设置了最大登陆数量,当到达最大连接数量时后续的客户端无法再接入此FTP服务器进行操作.

匿名用户的上传速率的限制同样可以在服务端配置中进行设置,设置后进行上传时速度会逐渐稳定到所设置的速率,相关参数为anon_max_rate.

##限制匿名用户上传速率为100M
anon_max_rate=102400

该参数可以通过上传大文件时观察速率变化来检测.

##生成2G大的大文件用于测试
dd if=/dev/zero of=/mnt/bigfile bs=1M count=2000
du -sh /mnt/bigfile

##进行上传操作
lftp 172.25.254.136
put /mnt/bigfile

有时我们可能需要有的用户能够跳转到上级目录而用的用户不能.这种区分用户权限的行为可以通过chroot_list相关参数来实现,具体方法与user_list类似.

chroot_local_user=NO		##不锁定用户目录
chroot_list_enable=YES		##开启黑名单功能
chroot_list_file=/etc/vsftpd/chroot_list

开启后,在chroot_list名单中的用户都被锁定到自己的家目录,不再其中的用户则不受影响.

但如果反过来操作,chroot_list名单也可以作为白名单使用.

chroot_local_user=YES		##锁定用户目录
chroot_list_enable=YES		##开启名单功能,这时变为白名单
chroot_list_file=/etc/vsftpd/chroot_list
  • 值得注意的是,chroot_list文件默认不存在,需要字自行创建

同样,也可以对虚拟用户分别设置其家目录和权限

##创建虚拟用户并创建认证文件
vim /etc/vsftpd/virt_users
db_load -T -t hash -f /etc/vsftpd/virt_users /etc/vsftpd/virt_users.db

##编写认证规则并启用
vim virt_user
vim /etc/vsftpd/vsftpd.conf 
systemctl restart vsftpd

##在服务端创建用于实验的虚拟用户的家目录,UserFile用于方便ls辨识
mkdir -p /FTP/User{1,2}/pub
touch /FTP/User1/User1File
touch /FTP/User2/User2File
##修改虚拟家目录的权限,使得ftp用户有权限对其进行擦作
chgrp ftp /FTP/User{1,2}/pub
chmod 0775 /FTP/User{1,2}/pub

##对配置设置进行验证
lftp 172.25.254.136 -u User1
lftp 172.25.254.136 -u User2

认证文件内容加密存储认证文件虚拟用户登录设置规则处理虚拟用户登录成功家目录准备工作使用$USER变量配置家目录验证独立家目录同样,我们也可以单打对虚拟用户分开进行权限设定,实现不同的虚拟用户拥有不同权限.

  • 首先关闭匿名用户的全局设置
  • 开启虚拟用户配置目录并指定目录
  • 创建与用户名对应的配置文件并编写具体配置项
##创建虚拟用户配置目录并对User1虚拟用户赋予上传权限
[root@Node1 ~]# vim /etc/vsftpd/vsftpd.conf 
[root@Node1 ~]# cd /etc/vsftpd/
[root@Node1 vsftpd]# ls
ftpusers   virt_users     vsftpd.conf
user_list  virt_users.db  vsftpd_conf_migrate.sh
[root@Node1 vsftpd]# mkdir userconfdir
[root@Node1 vsftpd]# cd userconfdir/
[root@Node1 userconfdir]# vim User1
[root@Node1 userconfdir]# cat User1 
anon_upload_enable=YES
##对个别用户进行权限设置的验证
lftp 172.25.254.136 -u User1
Password: 
lftp User1@172.25.254.136:~> cd pub/
lftp User1@172.25.254.136:/pub> put /etc/passwd
2703 bytes transferred
lftp User1@172.25.254.136:/pub> ls
-rw-r--r--    1 1001     50           2703 Feb 22 06:20 passwd
lftp User1@172.25.254.136:/pub> exit

lftp 172.25.254.136 -u User2
Password: 
lftp User2@172.25.254.136:~> ls                    
-rw-r--r--    1 0        0               0 Feb 22 06:09 User2File
drwxrwxr-x    2 0        50              6 Feb 22 06:08 pub
lftp User2@172.25.254.136:/> cd pub/
lftp User2@172.25.254.136:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp User2@172.25.254.136:/pub> exit

注释掉全局配置
用户分别配置的方法赋予User1用户上传权限User1上传成功而User2上传失败

主配置文件使用参数汇总

anonymous_enable=YES			允许使用匿名用户登录
anon_root=/Testir				修改匿名用户默认登陆目录
anon_upload_enable=YES			允许匿名用户上传
anon_mkdir_write_enable=YES		允许匿名用户创建目录
anon_world_readable_only=NO		是否允许匿名用户下载不可读的文件,NO时允许
anon_other_write_enable=YES		允许匿名用户删除和重命名
anon_umask=022					设置匿名用户上传保留权限为022
chown_uploads=YES				允许修改匿名用户上传文件的用户身份
chown_username=Test				使身份为Test用户
chown_upload_mode=0644			修改文件权限为0644


local_enable=YES				可以使用本地用户登录
write_enable=YES				FTP服务器是否可写
lacal_umask=022					设置本地用户上传文件的保留权限为022

userlist_enable=YES				开启名单机制
userlist_deny=NO				黑名单变为白名单

pam_service_name=virt_user					设置虚拟用户登陆验证规则
guest_enable=YES							是否允许虚拟用户登录
guest_username=ftp							登陆的虚拟用户使用ftp用户身份
local_root=/FTP/$USER						使用$USER变量设置虚拟用户的独立家目录
user_sub_token=$USER						告诉系统$USER是变量而不是字符串
user_config_dir=/etc/vsftpd/userconfidir	设定用户配置目录的路径
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值