文章目录

  • ftp介绍
  • vsftpd安装
  • 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上传失败:

可以看到虚拟用户配置独立成功!

Linux下vsftpd服务的部署相关推荐

  1. Linux下Apache服务的部署和配置

    目录 Apache服务的安装 yum源安装: 目录文件 源码包安装: 目录文件:

  2. Linux系统工程师--(1)Vsftpd服务的部署及优化与linux中内核级加强型火墙的管理

    Linux系统工程师 实验所用系统为Redhat-rhel8.2. 目录 Linux系统工程师 Linux的系统工程师--Vsftpd服务的部署及优化 一.ftp介绍 二.vsftpd安装及启用 三. ...

  3. Vsftpd 服务的部署及优化

    Vsftpd 服务的部署及优化 1 实验环境 2 ftp介绍 3 vsftpd安装与启用 4 vsftpd基本信息 5 用户访问控制 5.1 匿名用户访问 5.2 本地用户访问 6 虚拟用户访问 6. ...

  4. linux下ftp服务阶段实验(3)

    linux下ftp服务阶段实验(3) 3.  (1)匿名用户的FTP根目录是/ftp,只能下载,下载速度为100Kbps     (2)本地用户hello的FTP根目录为/hello,可以上传下载,家 ...

  5. Linux下网络服务的安全设置

    Linux下网络服务的安全设置 Linux操作系统由于其良好的稳定性.健壮性.高效性和安全性.正在成为各种网络服务的理想平台.各种网络应用在Linux系统上部有性能卓越的应用,例如,提供Web服务的A ...

  6. linux追踪tomcat报错信息,linux下tomcat服务的启动、关闭与错误跟踪

    linux下tomcat服务的启动.关闭与错误跟踪,远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务: 1).启动tomcat服务 进入tomcat主目录下的bin目录,然后执行如下 ...

  7. linux下tomcat服务的相关命令

    2019独角兽企业重金招聘Python工程师标准>>> 一:Linux下tomcat服务的启动.关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tom ...

  8. linux下nginx+python+fastcgi部署总结(web.py版)

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇文章linux下nginx+python+fastcgi部署总结(django版)中,我们部署了nginx+djang ...

  9. linux下启动nfs服务,linux下Samba服务和NFS服务配置的方法

    linux下Samba服务和NFS服务配置 一.Samba服务配置过程 samba的功能很简单,就是为了使linux和windows之间能够实现共享.并且利用samba搭建文件服务器,不仅比windo ...

最新文章

  1. linux qcom LCD framwork
  2. db29.7时间格式化为时间到时分秒_python基础系列 | 示例讲解时间模块datetime
  3. mysql 默认当前时间_复制信息记录表|全方位认识 mysql 系统库
  4. 11.11.25 v2 done
  5. ICE第三篇------一些疑难点
  6. win8编程c语言,Win8系统怎么运行C语言 win8系统运行C语言的方法
  7. Python基础学习笔记三
  8. Linux忘记root密码
  9. node.js处理torrent
  10. Android解决getExternalStorageDirectory在29后废弃问题,亲测能用
  11. Linux下zip命令-不打包目标文件目录
  12. linux中send函数,Linux系统调用之send/sendto/sendmsg函数解析
  13. Moore-Penrose 广义逆/伪逆 (The Moore-Penrose Pseudoinverse)
  14. 微软MSN博客申请使用全功略(转)
  15. 运维排查篇 | 访问nginx出现403错误
  16. 膨胀卷积(空洞卷积)
  17. 阿里主流开源框架大汇总
  18. Codeforces Round #548 C. Edgy Trees
  19. 触发拍照4G低功耗摄像机数据监控方案
  20. 高位字节与低位字节简单介绍

热门文章

  1. 科学计算机技术标准差,自动化技术_计算机技术_
  2. 疫情之下:如何高效远程办公
  3. 极客日报:美团拼多多等平台下架“一分钱秒杀”;全球大量网站集体宕机,一度无法访问;Swift内置对并发的支持
  4. 打怪物小游戏,无聊打发时间
  5. Android使用Service播放音乐
  6. Archlinux无法启动vmware虚拟机
  7. c语言版贪吃蛇《课程设计》
  8. oracle 优化 io占用,oracle 整体性能优化概述之五:调整磁盘io
  9. 如何用深度学习生成图片(GAN, pix2pix, CycleGAN和pix2pixHD)
  10. android手机整体规模,2021年Android手机市场规模