【一】Linux中vsftpd服务的部署及优化

一、ftp介绍

ftp:file transfer proto
互联中最老牌的文件传输协议

二、vsftpd基本信息

服务名称:
vsftpd.service

配置目录:
/etc/vsftpd

主配置文件:
/etc/vsftpd/vsftpd.conf

默认发布目录:
/var/ftp

使用ftp服务时常见的四种报错信息

报错代码 意义
550 程序本身拒绝
553 文件系统权限限制
500 权限过大
530 认证失败

三、实验环境设置(vsftpd安装及启用)

需要有服务端主机和测试端(客户端)主机,这里也可以用westosa主机当服务端,同时也在westosa测试或可以在真机测试

  • 对于服务端主机来说,有以下步骤:
    1、安装vsftpd

    dnf install vsftpd -y #前提是配置好软件仓库
    

    2、关闭selinux

    vim /etc/sysconfig/selinux
    #修改SELINUX=disabled
    reboot
    

    重启后

    getenforce
    查到selinux状态为disabled
    

    开启ftp服务并让火墙允许ftp

    systemctl enable --now vsftpd
    firewall-cmd --permanent --add-service=ftp
    firewall-cmd --reload
    
  • 对于测试端主机来说:

    dnf install lftp -y
    

测试:

lftp 172.25.254.100 -u westos
#用ls能查看到文件说明成功,quit退出

也可以在web上 ftp://172.25.254.100/
输入用户密码查看文件 ,作用也就等同于非匿名登陆查看

【一】Linux中vsftpd服务的部署及优化_第1张图片

【一】Linux中vsftpd服务的部署及优化_第2张图片
【一】Linux中vsftpd服务的部署及优化_第3张图片
在这里插入图片描述
【一】Linux中vsftpd服务的部署及优化_第4张图片
【一】Linux中vsftpd服务的部署及优化_第5张图片
【一】Linux中vsftpd服务的部署及优化_第6张图片

四、匿名用户访问控制

lftp 172.25.254.72      ##当访问ftp服务时没有加入用户认证为匿名访问
lftp 172.25.254.72 -u westos   ##本地用户访问

1、匿名用户登录控制

vim anonymous_enable=YES|NO
#修改为YES,就是允许匿名用户登录
systemctl restart vsftpd

在这里插入图片描述

2、匿名用户家目录控制

匿名登录时默认是ftp用户
登录lftp默认家目录是 /var/ftp/
【一】Linux中vsftpd服务的部署及优化_第7张图片

修改匿名登陆位置

vim /etc/vsftpd/vsftpd.conf
#在anonymous_enable=YES下添加一行:
#13 anon_root=/westos

systemctl restart vsftpd

在这里插入图片描述
创建新修改匿名登录位置;

mkdir /westos
touch /westos/westosfile{1..3}
#在该目录下创建三个文件用于测试时观察

在这里插入图片描述
【一】Linux中vsftpd服务的部署及优化_第8张图片
实验后再修改回去
在这里插入图片描述在这里插入图片描述

3、匿名用户上传控制

上传文件失败
报错550因为程序没有赋予权限所以拒绝
【一】Linux中vsftpd服务的部署及优化_第9张图片

vim /etc/vsftpd/vsftpd.conf
#修改anon_upload_enable=YES
systemctl restart ftpd

在这里插入图片描述
我们用 ll -d命令查看pub目录的权限是755,没有w权限也会导致上传失败
我们可以chmod 777来改pub权限,但是这样给的权限过大也不好
或者我们可以把pub更改目录的组为ftp 修改权限为775
【一】Linux中vsftpd服务的部署及优化_第10张图片
测试:登录lftp,在pub目录上传/etc/passwd文件
【一】Linux中vsftpd服务的部署及优化_第11张图片

4、匿名用户目录建立控制

vim /etc/vsftpd/vsftpd.conf
#anon_upload_enable=YES 表示可以建立目录
systemctl restart vsftpd

在这里插入图片描述
测试:登录lftp,在pub目录下创建名为test的目录
【一】Linux中vsftpd服务的部署及优化_第12张图片

5、匿名用户删除命令

刚才前两个命令修改完之后,我们可以上传文件和创建目录,但是我们并不能将上传的文件或创建的目录删除

删除文件会有550报错,程序没有赋予权限所以拒绝
【一】Linux中vsftpd服务的部署及优化_第13张图片

vim /etc/vsftpd/vsftpd.conf
#在anon_mkdir_write_enable=YES下方添加一行:
						anon_other_write_enable=YES
systemctl restart vsftpd

在这里插入图片描述

测试:登录lftp,删除之前在pub下上传的文件passwd和创建的目录test
【一】Linux中vsftpd服务的部署及优化_第14张图片

6、匿名用户下载控制

让匿名用户可以下载不能读的文件,文件被下载到我们登录lftp前所在的位置

vim  /etc/vsftpd/vsftpd.conf
#接着文件里删除命令这一行再添加一行:
					anon_world_readable_only=NO
systemctl restart vsftpd

在这里插入图片描述
测试:在root家目录登录lftp,在pub目录上传passwd文件,用get命令下载passwd文件,退出lftp,用ls命令查看到在家目录里有passwd
【一】Linux中vsftpd服务的部署及优化_第15张图片

7、匿名用户上传文件权限设定

vim /etc/vsftpd/vsftpd.conf
#在文件local_umask=022这一行下方添加一行:
							 anon_umask=022
#匿名用户上传的文件被设定为644权限
systemctl restart vsftpd

在这里插入图片描述
测试:登录lftp,在pub目录下上传/etc/group文件,并查看文件权限
【一】Linux中vsftpd服务的部署及优化_第16张图片

8、匿名用户上传文件的用户身份设定

实验我们用westos这样用户身份上传文件,注意它的id为1000
在这里插入图片描述

vim /etc/vsftpd/vsftpd.conf
#chown_uploads=YES
#chown_username=westos
systemctl restart vsftpd

在这里插入图片描述

登录lftp在pub目录下上传/etc/inittab文件,可以看到上传文件的用户身份为westos,但是我们刚刚修改的匿名用户上传文件的权限失效了。
【一】Linux中vsftpd服务的部署及优化_第17张图片
因为我们这时已经用了westos的用户身份上传的文件,所以设定的匿名用户上传文件权限在这里不起作用,现在我们设定用westos用户上传文件的权限:

vim /etc/vsftpd/vsftpd.conf
#在刚才设定上传文件的用户身份的命令下添加一行:
						chown_upload_mode=0644
systemctl restart vsftpd

在这里插入图片描述

删掉pub目录之前的inittab文件 重新上传查看文件权限
【一】Linux中vsftpd服务的部署及优化_第18张图片

9、匿名用户登陆数量控制

为防止服务器过于繁忙,可设定客户端最大数量

vim /etc/vsftpd/vsftpd.conf
#添加一行:max_clients=2 当第三个客户端登陆lftp时,服务需要等待
systemctl restart vsftpd

【一】Linux中vsftpd服务的部署及优化_第19张图片

测试:开启三个shell都登录lftp,前两个客户端能正常使用,到第三个客户端lftp繁忙
【一】Linux中vsftpd服务的部署及优化_第20张图片

10、匿名用户上传速率控制

我们选择一个较大的文件来实验,用scp将主机里镜像源挂载文件里的install.img文件复制到westosa的/mnt目录
登录lftp,在pub目录上传install.img文件可以看到上传的很快
【一】Linux中vsftpd服务的部署及优化_第21张图片
为了节约服务器资源,我们对匿名用户上传文件限制速度

vim /etc/vsftpd/vsftpd.conf
#添加一行:anon_max_rate=204800  (以字节为单位,200kb/s左右) 
systemctl restart vsftpd

【一】Linux中vsftpd服务的部署及优化_第22张图片
将之前lftp上传的install.img文件删除 重新上传看它的上传速率
【一】Linux中vsftpd服务的部署及优化_第23张图片

五、本地用户的访问

实验需要,我们创建一个新用户lee,修改密码为westos
在这里插入图片描述

1、登录控制

vim /etc/vsftpd/vsftpd.conf
#local_enable=NO|YES
默认就是YES,当改为NO时,重启服务,本地用户无法登陆使用lftp

2、家目录控制

默认家目录是在用户的家目录,如/home/lee
【一】Linux中vsftpd服务的部署及优化_第24张图片

设置家目录和匿名用户的家目录设置差不多

vim /etc/vsftpd/vsftpd.conf
#local_root=/westos
systemctl restart vsftpd

在这里插入图片描述
【一】Linux中vsftpd服务的部署及优化_第25张图片

3、上传的文件权限控制

vim  /etc/vsftpd/vsftpd.conf
#local_umask=077
重启服务

在这里插入图片描述
开启lftp put的文件权限就为077
【一】Linux中vsftpd服务的部署及优化_第26张图片
实验后vim改回022

4、用户登录控制

有两个相关文件:
在这里插入图片描述

/etc/vsftpd/ftpusers ##永久黑名单文件
/etc/vsftpd/user_list ##默认黑,临时黑白名单文件

a)对于ftpusers文件
它区别之前讲过的黑白名单,这里的永久黑名单文件优先级更高,永黑名单上的用户必定无法登陆使用lfpd

vim /etc/vsftpd/ftpusers
#把lee用户写入

【一】Linux中vsftpd服务的部署及优化_第27张图片

b)对于临时黑白文件user_list

vim /etc/vsftpd/vsftpd.conf
#userlist_enable=YES #开启user_list
#userlist_deny=YES|NO #yes时为黑名单,no时为白名单
systemctl restart vsftpd

在这里插入图片描述
user_list为黑名单时,在其中写入westos,westos被禁止登录使用
【一】Linux中vsftpd服务的部署及优化_第28张图片
user_list为白名单时,westos在文件中,这是westos是被允许登录使用,其他没有在文件中的用户无法登录使用
【一】Linux中vsftpd服务的部署及优化_第29张图片
注:把westos再写入永久黑名单ftpusers,即使它在白名单里,也无法正常登录使用,这里的永久黑名单>白名单
【一】Linux中vsftpd服务的部署及优化_第30张图片
在这里插入图片描述

5、锁定用户到自己的家目录中

用lee用户登陆lftp
cd /
ls可以看到根下所有文件,权限过大。因此考虑把用户锁定在自己的家目录中,不能跳出自己的家目录。

vim /etc/vsftpd/vsftpd.conf
#chroot_local_user=YES
systemctl restart vsftpd

在这里插入图片描述
修改完登录lftp发现500报错,说明文件权限过大
在这里插入图片描述
解决:

chmod u-w /home/* #取消用户的写的命令

再次登陆lftp就ok了,lee无法跳出自己的家目录
【一】Linux中vsftpd服务的部署及优化_第31张图片

a)锁定用户到自己家目录的白名单

在开启锁定用户的家目录时即“chroot_local_user=YES",所有用户都被锁定

vim /etc/vsftpd/vsftpd.conf
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
开启这两行,意味着开启白名单
重启服务

【一】Linux中vsftpd服务的部署及优化_第32张图片

cd /etc/vsftpd/
vim /etc/vsftpd/chroot_list
#文件中写入westos

westos用户在白名单里,所以可以跳出家目录
【一】Linux中vsftpd服务的部署及优化_第33张图片

b)锁定用户到自己家目录的黑名单

当没有开启锁定用户到自己的家目录 “chroot_local_user=NO",所有用户都可以跳出家目录

vim /etc/vsftpd/vsftpd.conf
#chroot_local_user=NO

#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#开启这两行意味着开启黑名单
重启服务

在这里插入图片描述

此时chroot_list文件中出现的用户westos将被锁定到自己的家目录无法跳出
【一】Linux中vsftpd服务的部署及优化_第34张图片

六、虚拟用户访问

1.建立虚拟用户

步骤:
a)建立认证文件模板

vim /etc/vsftpd/users
#创建三个虚拟用户user1、2、3,密码都是123

【一】Linux中vsftpd服务的部署及优化_第35张图片
b)加密认证文件

db_load -T -t hash -f users users.db
# -T 转换 -t type -f 指定

转换后生成了加密的认证文件users.db
【一】Linux中vsftpd服务的部署及优化_第36张图片
c)编写认证策略文件authfile(自己命名)
在/etc/vsftpd/vsftpd.conf文件中:“pam_service_name=vsftpd"为默认认证策略文件
在这里插入图片描述

可以用rpm -qc vsftpd查到文件是/etc/pam.d/vsftpd
【一】Linux中vsftpd服务的部署及优化_第37张图片
我们模仿这个文件自己写一个authfile文件用于指定认证策略

vim /etc/pam.d/authfile
account         required        pam_userdb.so   db=/etc/vsftpd/users
auth            required        pam_userdb.so   db=/etc/vsftpd/users
	  							     ##这里默认是db格式文件,所以其实是user.db省略了db

在这里插入图片描述

d)修改认证策略文件

vim  /etc/vsftpd/vsftpd.conf
#修改pam_service_name=authfile
#添加guest_enable=YES
#添加guest_username=ftp #虚拟用户默认使用ftp用户
systemctl restart vsftpd

在这里插入图片描述

用虚拟用户user1、2、3登陆lftp服务ok了
单用本地用户登陆lftp服务无法正常使用,因为已经修改了认证策略文件
【一】Linux中vsftpd服务的部署及优化_第38张图片

2、虚拟用户家目录的独立设定

虚拟用户登录后默认家目录都是ftp的家目录

现在为三个虚拟用户分别设定各自的家目录: /ftphome/user1或2或3

mkdir -p /ftphome/user{1..3}
mkdir -p /ftphome/user{1..3}/pub
为了区分三个家目录:
touch /ftphome/user1/user1file
touch /ftphome/user2/user2file
touch /ftphome/user3/user3file

设定虚拟用户家目录独立

vim /etc/vsftpd/vsftpd.conf
local_root=/ftphome/$USER 
#在shell里输入 $USER 得到的输出为当前用户名
user_sub_token=$USER 
#告诉系统$USER不是普通字符串

systemctl restart vsftpd

【一】Linux中vsftpd服务的部署及优化_第39张图片

3、用户独立配置

先将 /etc/vsftpd/vsftpd.conf 中匿名用户上传文件的权限关闭,三个虚拟用户现在就不能上传文件了
在这里插入图片描述
把三个虚拟用户家目录里的pub目录更改组为grp 修改目录权限

chgrp ftp /ftphome/user{1..3}/pub
chmod 775 /ftphome/user{1..3}/pub
ls -ld /ftphome/user{1..3}/pub

【一】Linux中vsftpd服务的部署及优化_第40张图片
给user1添加独立配置,让它可以有权限上传文件

vim /etc/vsftpd/vsftpd.conf 
#在认证策略文件几行下面添加:
user_config_dir=/etc/vsftpd/userconf #独立配置文件应该所在的目录

#userconf这个目录原本没有
mkdir /etc/vsftpd/userconf

cd /etc/vsftpd/userconf/
vim user1 #以用户名来命名独立配置文件
#anon_upload_enable=YES

在这里插入图片描述
【一】Linux中vsftpd服务的部署及优化_第41张图片
user1有独立用户配置,可以上传文件,user2和user3不可以
【一】Linux中vsftpd服务的部署及优化_第42张图片

你可能感兴趣的:(linux,运维,服务器)