Linux就该这么学 | 第11章 部署 vsftpd 服务

第11章:使用 vsftpd 服务传输文件

本章学习内容:什么是文件传输协议?如何部署和使用vsftpd服务?什么又是简单文件传输协议?掌握简单文件传输协议的理论及配置方法。

一、文件传输协议 FTP

1、文件传输协议的诞生背景

一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。今天的互联网是由几千万台个人计算机、工作站、服务器、小型机、大型机、巨型机等具有不同型号、不同架构的物理设备共同组成的,而且即便是个人计算机,也可能会装有 Windows、Linux、UNIX、Mac 等不同的操作系统。为了能够在如此复杂多样的设备之间解决问题解决文件传输问题,文件传输协议(FTP)应运而生

2、什么是文件传输协议?

FTP 是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21号端口,其中端口 20(数据端口)用于进行数据传输,端口 21(命令端口)用于接受客户端发出的相关 FTP 命令与参数。FTP 服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些 FTP 客户端工具还可以支持文件的多点下载以及断点续传技术。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第1张图片
FTP协议

3、什么是FTP服务器?什么是FTP客户端?

FTP 服务器是按照 FTP 协议在互联网上提供文件存储和访问服务的主机;FTP 客户端则是向服务器发送连接请求,以建立数据传输链路的主机。

4、FTP协议有哪两种工作模式?

  • 主动模式:FTP 服务器主动向客户端发起连接请求。
  • 被动模式:FTP 服务器等待客户端发起连接请求(FTP 的默认工作模式)。

防火墙一般是用于过滤从外网进入内网的流量,因此有些时候需要将 FTP 的工作模式设置为主动模式,才可以传输数据。

5、什么是vsftpd服务?

vsftpd(very secure ftp daemon,非常安全的 FTP 守护进程)是一款运行在 Linux 操作系统上的 FTP 服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他 FTP 服务程序不具备的特点。

6、安装并初步认识vsftpd服务

1)安装vsftpd程序:在配置妥当 Yum 软件仓库之后,就可以安装 vsftpd 服务程序了。

yum  install  -y  vsftpd

2)iptables 防火墙管理工具默认禁止了 FTP 传输协议的端口号,因此在正式配置 vsftpd 服务程序之前,为了避免这些默认的防火墙策略“捣乱”,还需要清空 iptables 防火墙的默认策略,并把当前已经被清理的防火墙策略状态保存下来。

iptables  -F
service  iptables  save

3)查看vsftpd服务的配置文件。

可以在 grep 命令后面添加-v 参数,过滤并反选出没有包含井号(#)的参数行(即过滤掉所有的注释信息),然后将过滤后的参数行通过输出重定向符写回原始的主配置文件中。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第2张图片
重定向

4)vsftpd 主配置文件中的常用字段及其含义如下图示:

Linux就该这么学 | 第11章 部署 vsftpd 服务_第3张图片
vsftpd.conf

二、vsftpd 服务程序

1、三种登录 FTP 服务器的认证模式

vsftpd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到 FTP 服务器上。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第4张图片
三种登录FTP服务器的认证模式

2、安装并使用 ftp 工具

ftp 是 Linux 系统中以命令行界面的方式来管理 FTP 传输服务的客户端工具。安装如下:

yum  install  ftp
man  ftp
ftp简介

3、使用匿名开放模式登录FTP服务器

在 vsftpd 服务程序中,匿名开放模式是最不安全的一种认证模式,任何人都可以无需密码验证而直接登录到 FTP 服务器。这种模式一般用来访问不重要的公开文件(在生产环境中尽量不要存放重要文件)。另外,使用防火墙把vsftpd服务程序访问设置在企业内网的范围中,也可以保障基本的安全性。

1)与匿名用户相关的权限参数

vsftpd 服务程序默认开启了匿名开放模式,我们可以为匿名用户开放上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。与匿名用户相关的权限参数如下图:

Linux就该这么学 | 第11章 部署 vsftpd 服务_第5张图片
与匿名用户相关的权限参数

2)为匿名用户配置若干权限

vim  /etc/vsftpd/vsftpd.conf
Linux就该这么学 | 第11章 部署 vsftpd 服务_第6张图片
vsftpd.conf

3)对vsftpd服务配置完成后,需重启vsftpd服务,并把vsftpd服务添加到开机自启动项中去。

systemctl  restart  vsftpd
systemctl  enable  vsftpd

4)使用 ftp 命令测试vsftpd服务是否已经支持了匿名登录方式。

使用 ftp 命令连接 vsftpd服务器(匿名模式下,账户名默认为 anonymous,密码为空)。在连接到 FTP 服务器后,默认访问的是/var/ftp 目录。我们可以切换到该目录下的 pub 目录中,然后尝试创建一个新的目录文件,以检验是否拥有写入权限。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第7张图片
ftp

5)解决“只有root用户才有权限向 /var/ftp 中写入数据”的问题。

ls  -ld  /var/ftp/pub
chown  -Rf  ftp  /var/ftp/pub
ls  -ld  /var/ftp/pub

6)解决SELinux对 ftp 服务的限制。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第8张图片
解决SELinux对 ftp 服务的限制

通过一番探索,终于可以顺利地以匿名方式登录到 vsftpd 服务器,并行使相应的权限了。

4、使用本地用户模式登录FTP服务器

相较于匿名开放模式,本地用户模式要更安全,而且配置起来也很简单。其常用的配置参数,如下图:

Linux就该这么学 | 第11章 部署 vsftpd 服务_第9张图片
本地用户模式

1)为vsftpd服务配置本地用户模式。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第10张图片
配置本地用户模式

2)重启vsftpd服务,并将其添加到开机启动项中去。

systemctl  restart  vsftpd
systemctl  enable  vsftpd

3)使用ftp命令连接vsftpd服务器,用户名即为Linux系统的本地用户,密码即为该用户的系统登录密码。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第11张图片
本地用户登录vsftpd服务器

问题分析:从上图测试来看,系统拒绝了root用户访问vsftpd服务器。这是因为 vsftpd 服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers 和 user_list),这两个文件有着类似的功能,只要里面写有某位用户的名字,就不再允许这位用户登录到 FTP服务器上。下面我们查看一下,ftpusers 和 user_list 这两个文件中是否包含了 root 用户名?

Linux就该这么学 | 第11章 部署 vsftpd 服务_第12张图片
user_list
Linux就该这么学 | 第11章 部署 vsftpd 服务_第13张图片
ftpusers

4)vsftpd服务程序为什么要默认禁止一批本地用户登录FTP服务器呢?

vsftpd 服务程序为了保证服务器的安全性而默认禁止了 root 管理员和大多数系统用户的登录行为,这样可以有效地避免黑客通过 FTP 服务对 root 管理员密码进行暴力破解。

5)现在我们使用一个在 ftpusers 和 user_list 文件中都不存在的用户来登录vsftpd服务器。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第14张图片
ftp

6)解决SELinux对vsftpd服务的限制。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第15张图片
解决SELinux对vsftpd服务的限制

5、使用虚拟用户模式登录FTP服务器

虚拟用户模式,相对前两种登录模式会更加安全,所以它的配置流程也会稍微复杂一些。

1)创建用于进行 FTP 认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。现在创建两个用户,分别为 aaa 和 bbb。

cd  /etc/vsftpd/
vim  vuser.list
Linux就该这么学 | 第11章 部署 vsftpd 服务_第16张图片
/etc/vsftpd/vuser.list

2)对密码数据库文件进行加密。

明文信息既不安全,也不符合让 vsftpd 服务程序直接加载的格式,因此需要使用 db_load 命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第17张图片
db_load

3)创建用于与FTP虚拟用户相关联的系统本地用户,并指定该用户的家目录(用于FTP存储文件的根目录)。

让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免 Linux 系统无法处理虚拟用户所创建文件的属性权限

Linux就该这么学 | 第11章 部署 vsftpd 服务_第18张图片
创建与FTP虚拟用户关联的本地系统用户

4)创建用于支持FTP虚拟用户的 PAM 文件。

通俗地讲,PAM 是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改。PAM 采取了分层设计(应用程序层、应用接口层、鉴别模块层)的思想,其结构如下图:

Linux就该这么学 | 第11章 部署 vsftpd 服务_第19张图片
PAM
vim  /etc/pam.d/vsftpd.vu
/etc/pam.d/vsftpd.vu

PAM 文件内的“db=”参数即为上述使用 db_load 命令所生成的账户密码数据库文件的路径,但不用写数据库文件的后缀。

5)对vsftpd服务进行配置,并指定 PAM认证。虚拟用户模式利用PAM文件进行认证时常用的参数如下图示:

Linux就该这么学 | 第11章 部署 vsftpd 服务_第20张图片
虚拟用户模式常用参数
vim  /etc/vsftpd/vsftpd.conf
Linux就该这么学 | 第11章 部署 vsftpd 服务_第21张图片
配置vsftpd服务

6)对两个虚拟用户 aaa 和 bbb 进行权限配置,并在 vsftpd 配置文件中指定保存着这两个虚拟用户权限的目录位置。

创建用于保存FTP虚拟用户权限的目录
设置 bbb 用户的权限
Linux就该这么学 | 第11章 部署 vsftpd 服务_第22张图片
在vsftpd配置文件中指定保存着虚拟用户的权限目录位置

7)解决SELinux对 vsftpd 服务的限制。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第23张图片
解决SELinux对 vsftpd 服务的限制

8)重启 vsftpd 服务,并使用 ftp 命令测试虚拟用户模式的登录及其对应的权限。

Linux就该这么学 | 第11章 部署 vsftpd 服务_第24张图片
ftp

三、简单文件传输协议 TFTP

1、什么是简单文件传输协议?

简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于 UDP 协议在客户端和服务器之间进行简单文件传输的协议。顾名思义,它提供不复杂、开销不大的文件传输服务(可将其当作 FTP 协议的简化版本)。

2、TFTP 的优势与劣势

劣势:TFTP 的命令功能不如 FTP 服务强大,甚至不能遍历目录,在安全性方面也弱于 FTP服务。而且,由于 TFTP 在传输文件时采用的是 UDP 协议,占用的端口号为 69,因此文件的传输过程也不像 FTP 协议那样可靠。

优势:TFTP 不需要客户端的权限认证,也就减少了无谓的系统和网络带宽消耗,因此在传输琐碎(trivial)不大的文件时,效率更高。

3、安装 TFTP 服务程序及其客户端工具

安装 TFTP 服务程序:
yum  install  tftp-server

安装 TFTP 客户端工具:
yum  install  tftp

4、开始使用 TFTP

1)启用 TFTP 服务

在 RHEL 7 系统中,TFTP 服务是使用 xinetd 服务程序来管理的。xinetd 服务可以用来管理多种轻量级的网络服务,而且具有强大的日志功能。在安装 TFTP 软件包后,还需要在 xinetd 服务程序中将其开启。

vim  /etc/xinetd.d/tftp
Linux就该这么学 | 第11章 部署 vsftpd 服务_第25张图片
启用TFTP

2)重启 xinetd 服务

重启 xinetd 服务并将其添加到系统的开机启动项中,以确保 TFTP 服务在系统重启后依然处于运行状态。考虑到有些系统的防火墙默认没有允许 UDP 协议的 69 端口,因此需要手动将该端口号加入到防火墙的允许策略中:

systemctl  restart  xinetd
systemctl  enable  xinetd
firewall-cmd  --permanent  --add-port=69/udp
firewall-cmd  --reload

3)使用 tftp 客户端工具测试 TFTP 服务。TFTP服务默认 的根目录为 /var/lib/tftpboot。 tftp命令常用的参数如下图:

Linux就该这么学 | 第11章 部署 vsftpd 服务_第26张图片
tftp
echo "i love tftp" > /var/lib/tftpboot/readme.txt
tftp  127.0.0.1

本章复习题

Linux就该这么学 | 第11章 部署 vsftpd 服务_第27张图片
复习题


本章完 2019-01-08

你可能感兴趣的:(Linux就该这么学 | 第11章 部署 vsftpd 服务)