Linux下vsftpd服务的部署

ftp介绍

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

vsftpd安装

在之前的博客“linux下的软件管理”的‘共享软件仓库’已经较为详细的说过。

  • yum install vsftpd -y 安装vsftpd软件。
  • 关闭selinux和firewalld
  • 启动vsftpd并设置为开机启动
    systemctl start vsftpd
    systemctl enable vsftpd

测试安装发布: 在客户主机里的firefox使用ftp访问资源主机的资源。

-----------------------以上详细步骤请访问之前的博客-------------------------

安装lftp软件:
在这里插入图片描述
lftp 是一款类 Unix 系统下命令行界面的 FTP 客户端软件
在这里插入图片描述这种状态名没有登录。使用ls将资源列出,如果能列出资源,才算访问成功。
若我们将vsftp服务关闭后,发现使用lftp即使能链接上,但是不嫩列出资源:
在这里插入图片描述

vsftpd基本信息

服务名称: vsftpd.service
配置目录: /etc/vsftpd
主配置文件: /etc/vsftpd/vsftpd.conf
默认发布目录: /var/ftp
报错信息:
550 程序本身拒绝
553 文件系统权限限制
500 权限过大
530 认证失败
使用 rpm -qc vsftpd 查看vsftpd 的信息
在这里插入图片描述

实验环境说明

在以下实验中,ftp服务器主机为rhel7:localost,IP:192.168.0.40
客户主机为rhel7:rhel7_node1 ,IP:192.168.0.70

匿名用户访问控制

匿名用户登录控制

在我们访问时,没有加任何名称却能够成功访问:
在这里插入图片描述
匿名访问的方式:lftp ip。 当访问ftp服务时没有加入用户认证为匿名访问
控制匿名用户登录:
为什么匿名用户可以访问?
这是因为配置文件/etc/vsftpd/vsftpd.conf中:
在这里插入图片描述
是允许匿名用户的登录,默认的访问路径为:/var/ftp/,如果将anonymous enable = NO
在这里插入图片描述
匿名用户则不能访问rhel7localhost
在这里插入图片描述

匿名用户家目录控制

编辑配置文件:
在这里插入图片描述
重启vsftpd,再次使用rhel7_node1访问:
在这里插入图片描述
可以发现,再次使用rhel7_node1匿名访问时家目录直接为/var/ftp/software。家目录成功更改。

匿名用户上传控制

我们将rhel7_node1下的/etc/passwd文件上传:
在这里插入图片描述
可以看到,权限被拒绝,且报错550,上面说过,报错550为程序本身拒绝。
我们可以进入配置文件:
在这里插入图片描述
将上传功能打开。保存退出并重启vsftp。重新使用rhel7_node1用户登录并上传/etc/passwd文件,查看效果:
在这里插入图片描述
我们发现,passwd并没有上传成功,且报错553,为文件系统权限限制(权限过小)。
这是因为我们将/etc/passwd上传到ftp访问的默认位置/var/ftp/
我们可以查看这个目录的权限:
在这里插入图片描述
权限为rwx r-x r-x 只有超级用户可写,其他用户没有写的权力。
所以我们尝试给目录满权限,并重新上传/etc/passwd:

在这里插入图片描述
在这里插入图片描述
这个时候又会报错550 :权限过大 ,这个时候访问会让系统变得很不安全,所以会拒绝访问。
我们将权限改回, 则能够正常被客户主机访问。
那我们该怎么将文件上传?我们可以上传到服务器的/var/ftp/的子目录
比如 /var/ftp/pub 。我们给pub满权限,使其对任何用户都可读写:

在这里插入图片描述

然后在客户主机将文件上传到服务器的/var/ftp/pub下:
在这里插入图片描述
上传成功!
虽然上传成功,但是发现下载不了!
在这里插入图片描述
所以,接下来我们要修改配置文件控制下载功能。

匿名用户下载控制

可以用 man 5 vsfptd.conf 查看vsfpt参数的设置:

查找 /read 可以看到:
在这里插入图片描述
在配置文件中添加:
在这里插入图片描述
这个时候,我们下载匿名用户家目录中的/pub/passwd,可以看到,能够成功下载:
在这里插入图片描述
我们在配置文件中修改匿名用户不能下载无read权的文件参数改为YES,尝试下载之前上传过的客户主机的/etc/shadow文件:

在这里插入图片描述
修改完重启vsftp服务:systemctl restart vsftpd
在客户主机下载/pub/shadow文件:
在这里插入图片描述
可以看到,这样就不能下载客户主机不能读的文件。

匿名用户目录建立控制

在vsftp中,可以使用 ?查询命令:
在这里插入图片描述
可以看到,在vsftp中可以新建目录,尝试新建目录:
在这里插入图片描述
可以看到,新建目录时报错550,程序本身拒绝。
我们继续编辑配置文件解决550报错:
在这里插入图片描述
在这里插入图片描述
编辑完之后保存退出,并重启vsftp服务。
在这里插入图片描述

匿名用户下删除,重命名控制

我们再尝试删除test目录:
在这里插入图片描述
删除失败,报错550,程序本身拒绝,继续编辑配置文件,在编辑配置文件之前,使用 man 5 vsftpd.conf查看vsftpd.conf删除的相关参数:
使用/write查找与写入有关内容:
在这里插入图片描述将此功能添加进配置文件,并使其开启:
在这里插入图片描述
编辑完之后保存退出,并重启vsftp服务。在客户端尝试再次删除,尝试重命名:
在这里插入图片描述
可以看到,test目录被成功重命名为westos,westos目录成功被删除!

匿名用户登陆数量控制

再没有对客户端登录数量限制的情况下,客户端可以无限数量登录:
在这里插入图片描述当我们登录数量越多,服务器负载就越大。所以一般在企业中会为了保证对以登录的用户体验对登录数量进行控制。
在这里插入图片描述
还是老办法,编辑配置文件:
在这里插入图片描述
编辑完之后保存退出,并重启vsftp服务。在客户端验证:
在这里插入图片描述

匿名用户上传速率控制

首先从/dev截取数量为600 大小为1M的文件到/mnt 命名为file1:
在这里插入图片描述
现将此文件使用vsftp上传:
在这里插入图片描述
可以看到,上传速率虽然不快,但是也有13.98M/s,如果2000或者更多个客户同时13.98M/s上传文件,那么服务器肯定时受不了。
所以一般在企业中会对客户主机的最大上传速率进行限速:
在这里插入图片描述修改配置文件,将限速的信息添加进去:
在这里插入图片描述
编辑完之后保存退出,并重启vsftp服务。将上传的文件删除,重新上传。
在这里插入图片描述

可以看到,上传速率基本保持在1M/s。
我们切换到本地用户登录然后上传相同文件:
在这里插入图片描述

本地用户的访问

本地用户:在ftp主机里是有用户身份的。
登录方式:lftp ip -u 本地用户

本地用户登陆控制

首先在ftp服务器主机中新建立两个新用户并设置密码:
-
编辑配置文件:
在这里插入图片描述
可以看到,默认是允许本地用户登录。我们修改为不能登录,将参数改为NO:
在这里插入图片描述
编辑完之后保存退出,并重启vsftp服务。在客户主机使用本地用户登录:
在这里插入图片描述
可以看到,本地用户登录失败。报错530,认证失败 。所以说,设定是生效的。

本地用户家目录控制

在本地用户登陆后,默认访问的是本地用户的家目录:
在这里插入图片描述
(xng的家目录是空的)
使用本地用户kiosk登录:
在这里插入图片描述
直接访问到的是本地用户的家目录。同样,通过编辑配置文件修改本地用户家目录:
在这里插入图片描述
编辑完之后保存退出,并重启vsftp服务。在客户主机使用本地用户xng登录:
在这里插入图片描述
可以看到,家目录变为ftp服务器的/software。设定成功!

本地用户写权限控制

使用本地用户上传文件:
上传文件/etc/passwd:
在这里插入图片描述
可以看到默认是直接可以上传的
在这里插入图片描述
默认也是可以删除的。
同样,我们可以编辑配置文件来对本地用户的写权限进行控制:
在这里插入图片描述
可以看到本地用户的权限是默认开启的。我们将其修改为NO,编辑完之后保存退出,并重启vsftp服务。在客户主机使用本地用户xng登录并上传文件,查看效果:
在这里插入图片描述
可以看到上传失败,并报错550, 程序本身拒绝

上传文件权限控制

重新上传/etc/passwd
在这里插入图片描述
可以看到,上传的文件默认权限为755,umask值为022.
我们可以通过编辑配置文件的方式修改上传文件的权限:
在这里插入图片描述
将其修改为077:
在这里插入图片描述
再次使用本地用户上传文件,查看其权限:
在这里插入图片描述
可以看到,新上传的/etc/shadow文件的权限为700,umask值为077.
设定成功!

本地用户登陆控制 (黑名单)

默认情况下,ftp服务器里有身份的用户都能够登录,如果我们需要让一部分用户允许登录,一部分用户不允许登录,该怎样设定?
在服务器主机中的/etc/vsftpd/下,有一个名为ftpusers的文件
在这里插入图片描述
这个文件就是ftp的永久黑名单。(无论怎么设定,只要名单里有,就不能登录)
而user_list是临时黑名单。
在ftpusers中加入本地用户xng:
在这里插入图片描述
这个时候,本地用户xng为被锁定状态,在客户主机登录本地用户xng查看效果:
在这里插入图片描述
在ftpuers移除xng用户,再次查看效果:
在这里插入图片描述
在这里插入图片描述
可以看到,效果非常明显。在ftpusers移除xng用户,xng用户成功登录。
如果将用户xng添加到user_list中,xng用户还是不能正常登录:
在这里插入图片描述
在这里插入图片描述
在user_list中移除xng,查看登录效果:
在这里插入图片描述
在这里插入图片描述
在user_list中移除xng,登录成功!

本地用户登陆白名单

在vsfpt配置文件中添加启用本地用户登录白名单功能,启用这个功能一但启用,默认除了白名单里的用户可以登录,其他用户不能登录:
在这里插入图片描述
这个功能打开后,就#设定/etc/vsftpd/user_list为白名单 ,不在名单中的用户不能登陆ftp,原功能默认黑名单失效。设定完成后编辑完之后保存退出,并重启vsftp服务。
在/etc/vsftpd/user_list添加xng用户:
在这里插入图片描述
在客户端使用本地用户xng尝试登录:
在这里插入图片描述
可以看到,本地用户xng登录成功!
尝试使用本地用户haha登录:
在这里插入图片描述
匿名有也不能登录。

如果白名单的用户和ftpusers永久黑名单上的用户冲突会发生什么?
在ftpusers里同样添加xng用户:
在这里插入图片描述

在客户端使用本地用户xng尝试登录:
在这里插入图片描述
由此可以知道,无论在什么情况下,无论社么设定,只要是出现在ftpusers永久黑名单里的用户,是无法登录的!

锁定本地用户到自己的家目录中的白名单

在我们客户主机使用xng本地用户登录后,默认位置在xng用户的家目录,
但是,我们发现,xng用户时可以访问服务器的根目录:
在这里插入图片描述
这总情况对于ftp服务器来说是非常危险的。所以我们还需要做的是将用户限制在自己的家目录。
解决方法还是编辑配置文件:
在这里插入图片描述
设定完成后编辑完之后保存退出,并重启vsftp服务。在客户端登录本地用户,并尝试访问服务器根目录查看效果:
在这里插入图片描述
此时不能正常登录,报错500,权限过大导致不能访问。问题为家目录的权限和配置文件设定起冲突,我们这里将ftp服务器家目录的w权限去掉:

chmod u-w /home/*       去掉家目录的w权限

再次尝试登录:
在这里插入图片描述
并且尝试访问服务器根目录:
在这里插入图片描述
可见,成功将本地用户隔离在本地用户的家目录里!

锁定本地用户到自己的家目录中的白名单

但是,这么做的最大问题就是将全部的本地用户隔离在自己的家目录,或者全部本地用户没有隔离在自己的家目录,这么做的话,显然,范围过大,如果我们向让特定的用户隔离,特定的用户不隔离,显然就无法实现。
所以我们可以编辑配置文件打开白名单:
在这里插入图片描述
:在所有用户被隔离的情况下,开启这个名单,这个名单即为为锁定用户到自己家目录白名单。
在所有用户没有被隔离的情况下,开启这个名单,这个名单即为为锁定用户到自己家目录黑名单。
在目前状况下,这个名单为锁定用户到自己家目录的白名单。
可以看到,这个名单在系统中是不存在的,需要我们手动建立:
在这里插入图片描述
将用户xng添加到我们手动建立的名单(chroot_list)里:
在这里插入图片描述
设置好后保存退出,此设定即为除用户xng,其他用户不能访问服务器根目录。在客户主机登录查看效果:
首先使用用户xng登录,尝试访问ftp服务器主机根目录:
在这里插入图片描述
可以看到,可以访问服务器的根目录,切换用户为haha,对比查看效果:
在这里插入图片描述
haha用户不能访问服务器的根目录!

锁定本地用户到自己的家目录中的黑名单

上面说过,在所有用户没有被隔离的情况下,开启这个名单,这个名单即为为锁定用户到自己家目录黑名单。
我们在配置文件中,将隔离所有用户被隔离在自己家目录关闭,继续保持名单功能打开:
在这里插入图片描述
此时名单为黑名单,在名单里添加用户xng:
在这里插入图片描述

设定完成后编辑完之后保存退出,并重启vsftp服务。在客户端登录本地用户,并尝试使用用户xng访问服务器根目录查看效果:
在这里插入图片描述
可以看到,xng用户不能访问服务器的根目录。尝试使用用户haha登录,查看效果:
在这里插入图片描述
可以看到,用户haha可以访问服务器的根目录!

虚拟用户访问

虚拟用户:在当前的服务器主机系统当中,是没有这个用户存在的身份,只有在ftp程序里才承认这个用户身份的存在。
服务器不可能无数量地新建本地用户,这样既浪费服务器资源,又造成登录用户权限过大而造成系统安全性的问题。
所以ftp就不适用系统的认证方式,而是重新为ftp服务来构建认证体系。

要想使用虚拟用户登录,就得有相关程序将ftp和用户密码相关联
这个程序,就是系统中的pam插件。pam会将用户所输入的用户名和密码与pam持有的用户名和密码进行比对,如果比对成功,ftp将允许用户登录。
pam的配置文件:/etc/pam.d/vsftp
在这里插入图片描述
在这里插入图片描述
可以看到pam.d中的vsftp文件认证策略中,使用的是当前系统的password-auth认证方式,在pam.d中可以找到改方式:
在这里插入图片描述打开此文件进行查看:
在这里插入图片描述
可以看到,里面为系统认证的方式。
所以普通本地用户登录时,会用到系统当中的/etc/passwd及/etc/shadow
两文件进行系统认证。

建立虚拟用户过程

所以,为了给ftp建立认证,我们也需要建立类似于/etc/passwd及/etc/shadow的文件。
首先建立认证文件模板 ,在/etc/vsftpd/下新建文件ftp_auth_file
在里边添加认证关系:
在这里插入图片描述
注意添加格式为账户一行密码一行的格式进行添加。编辑完成后保存退出,此时,这个ftp_auth_file文件还不能直接使用,因为我们添加的认证关系都是明文形式的,是非常不安全的。
使用命令db_load -T -t hash -f ftp_auth_file ftp_auth_file.db加密认证文件
其中:-T表示的是transform转换,-t hash :指定hash加密的形式
-f ftp_auth_file 指定转化的文件 ftp_auth_file.db:转化完成后生成的文件。
在这里插入图片描述
这个最终生成的 ftp_auth_file.db文件为系统所识别的认证文件,到此为止,我们生成的 ftp_auth_file.db认证文件与ftp还没有建立关系。
我们还要使用系统中的 pam_userdb.so 插件来完成认证。

在/etc/pam.d/下建立文件,文件名称即为认证策略名称,这里设置策略名称为ftp_auth westos:
在这里插入图片描述
编辑完成之后保存退出,接着编辑vsftp的配置文件,使系统识别我们建立的认证:
在这里插入图片描述
我们将新建的认证添加进去,将原有认证方式取消:
在这里插入图片描述
设定完成后编辑完之后保存退出,并重启vsftp服务。
以上就是建立虚拟用户过程的所有设定。下来我们进行测试:

可以看到,虚拟用户westos1成功登录:
在这里插入图片描述
虚拟用户westos2 westos3成功登录:
在这里插入图片描述但是我们不难发现,westos1,westos2,westos3登录进去访问的全部都是同一个目录,为/var/ftp。这显然不合理,客户的隐私不能得到保护,
且管理起来会特别麻烦。所以还需要做的为对虚拟用户分开进行控制。

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

首先在服务器的根下为westos1,westos2,westos3建立相应的家目录:

mkdir -p ftpuserdir/westos{1..3}

在这里插入图片描述
为了实验效果明显,分别在各自相应的家目录里建立各自的文件westos1file,westos2file,westos3file:
在这里插入图片描述
家目录及文件建立好之后,编辑vsftp的配置文件,我们这里可以使用系统当中的$UESER变量来指向用户各自的家目录。
关于 $USER:
$USER来源用户用户信息表,这个变量表示当前登录用户的状态信息
在这里插入图片描述
可以看到,输出的是当前用户状态信息。
编辑vsftp的配置文件,做如下修改:
在这里插入图片描述设定完成后编辑完之后保存退出,并重启vsftp服务。
返回客户主机使用虚拟用户登录查看家目录:
在这里插入图片描述
可以看到,登录虚拟用户后的家目录对应自己的文件。成功独立设定虚拟用户家目录!

虚拟用户配置独立

在虚拟用户的家目录下新建配置目录pub,并给其足够权限(匿名用户上传控制详细说过)使其能够上传数据:
在这里插入图片描述

在vsftp的配置文件中将上传功能打开,并使用虚拟用户上传文件:

在这里插入图片描述
可以看到,所有的虚拟用户都可以上传,也就是说,当我们打开上传功能时,所有的虚拟用户都可以往服务器上传文件。
但是,如果我们想要某一个虚拟用户可以上传数据,其它虚拟用户无权上传该怎么做?
我们想要实现上述问题,必须将虚拟用户的配置独立。
使用man 5 vsftpd.conf来查看配置说明:
在这里插入图片描述

也就是打开这个功能后,当我们建立了配置目录/etc/vsftp/user_conf,例如使用chris登录,其配置文件为配置目录/etc/vsftp/user_conf下的同名文件chris。

所以我们首先建立配置目录:/etc/vsftp/user_conf

 mkdir /etc/vsftpd/user_conf

如果我们想westos1可以上传,westos2,westos3不能上传。我们在建立好的配置目录下新建westos1的配置文件weseos1,并在westos1配置文件中添加可以上传的参数:

在这里插入图片描述
接着在vsfft的配置文件中启用该功能:
首先关闭用户的上传功能:
在这里插入图片描述
在这里插入图片描述
设定完成后编辑完之后保存退出,并重启vsftp服务。在客户主机中上传查看效果:
虚拟用户westos1成功上传:
在这里插入图片描述

虚拟用户westos2,westos3上传失败:
在这里插入图片描述
可以看到虚拟用户配置独立成功!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值