从零开始的Linux学习第十三天:VSFTP服务传输文件

2020.5.29-第十三天

使用vsftpd服务传输文件

碎碎念:ftp还是蛮实用的服务,配置也简单,虽然真正操作起来不一定能一次过呢…

FTP服务

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点,而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术。
FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式:
主动模式:FTP服务器主动向客户端发起连接请求。
被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。
防火墙一般是用于过滤从外网进入内网的流量,因此有些时候需要将FTP的工作模式设置为主动模式,才可以传输数据。

vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。
iptables防火墙管理工具默认禁止了FTP传输协议的端口号,在做实验的时候先清空iptables默认策略:
从零开始的Linux学习第十三天:VSFTP服务传输文件
由于vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)内容过多,且大部分都为注释信息,所以可以进行过滤操作只保留在使用的参数:
从零开始的Linux学习第十三天:VSFTP服务传输文件
常用的参数及作用:

从零开始的Linux学习第十三天:VSFTP服务传输文件
local_umask:ftp目录下,目录默认权限为777,文件为666,默认权限减去umask值便是创建后文件的权限值。

一、Vsftpd服务程序

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

匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客**了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客**了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

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

1.匿名访问模式(默认开启)

这种模式一般用来访问不重要的公开文件(在生产环境中尽量不要存放重要文件)。
vsftpd服务程序默认开启了匿名开放模式,我们需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。(但不建议在生产环境这么做)
可以向匿名用户开放的权限参数以及作用:
从零开始的Linux学习第十三天:VSFTP服务传输文件
从零开始的Linux学习第十三天:VSFTP服务传输文件
在vsftpd服务程序的主配置文件中正确填写参数,然后保存并退出。还需要重启vsftpd服务程序,让新的配置参数生效。(在生产环境中或者在RHCSA、RHCE、RHCA认证考试中一定要把配置过的服务程序加入到开机启动项中,以保证服务器在重启后依然能够正常提供传输服务)
从零开始的Linux学习第十三天:VSFTP服务传输文件
在vsftpd服务程序的匿名开放认证模式下,其账户统一为anonymous,密码为空。而且在连接到FTP服务器后,默认访问的是/var/ftp目录。可以切换到该目录下的pub目录中,然后尝试创建一个新的目录文件,以检验是否拥有写入权限:
从零开始的Linux学习第十三天:VSFTP服务传输文件
系统拒绝创建目录。因为匿名开放认证模式下,默认访问的是/var/ftp目录,其权限750,即只允许root管理员才能认证:
从零开始的Linux学习第十三天:VSFTP服务传输文件
报错信息从“权限拒绝”(Permission denied)变成了“创建目录的操作失败”(Create directory operation failed)。

使用getsebool命令查看与FTP相关的SELinux域策略都有哪些:
从零开始的Linux学习第十三天:VSFTP服务传输文件
从零开始的Linux学习第十三天:VSFTP服务传输文件
设置时使用-P参数让修改过的策略永久生效,确保在服务器重启后依然能够顺利写入文件。.
完成这些操作之后便可执行文件的创建、修改及删除的操作。

2.本地用户模式

相较于匿名开放模式,本地用户模式要更安全,而且配置起来也很简单。(把默认模式关掉,在启动别的模式)
从零开始的Linux学习第十三天:VSFTP服务传输文件
从零开始的Linux学习第十三天:VSFTP服务传输文件
从零开始的Linux学习第十三天:VSFTP服务传输文件
虽说可以用本地用户身份登录FTP服务器,但使用root管理员登录后:从零开始的Linux学习第十三天:VSFTP服务传输文件
在输入root管理员的密码之前,就已经被系统拒绝访问了。
这是因为vsftpd服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers和user_list),vsftpd服务程序目录中的这两个文件有个功能:只要里面写有某位用户的名字,就不再允许这位用户登录到FTP服务器上
从零开始的Linux学习第十三天:VSFTP服务传输文件
vsftpd服务程序为了保证服务器的安全性而默认禁止了root管理员和大多数系统用户的登录行为,这样可以有效地避免黑客通过FTP服务对root管理员密码进行暴力**。
(如果生产环境中使用root管理员不会对系统产生安全影响,直接删掉root即可)
可以另外使用没有在文件中记录的普通用户登录:从零开始的Linux学习第十三天:VSFTP服务传输文件

3.虚拟用户模式

第1步:创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码
从零开始的Linux学习第十三天:VSFTP服务传输文件
但是,明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。
从零开始的Linux学习第十三天:VSFTP服务传输文件
第2步:创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。
由于Linux系统中的每一个文件都有所有者、所属组属性,是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。
为了方便管理FTP服务器上的数据,可以把这个系统本地用户的家目录设置为/var目录(该目录用来存放经常发生改变的数据)。
从零开始的Linux学习第十三天:VSFTP服务传输文件
第3步:建立用于支持虚拟用户的PAM文件。
PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。
(通俗来讲,PAM是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改)
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:
从零开始的Linux学习第十三天:VSFTP服务传输文件
第4步:在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu,PAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM认证时,则需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。
(例如,在vsftpd服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。)
从零开始的Linux学习第十三天:VSFTP服务传输文件
从零开始的Linux学习第十三天:VSFTP服务传输文件
第5步:为虚拟用户设置不同的权限:
从零开始的Linux学习第十三天:VSFTP服务传输文件
然后再次修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。为了让修改后的参数立即生效,需要重启vsftpd服务程序并将该服务添加到开机启动项中:
从零开始的Linux学习第十三天:VSFTP服务传输文件
第6步:设置SELinux域允许策略,然后使用虚拟用户模式登录FTP服务器。
从零开始的Linux学习第十三天:VSFTP服务传输文件
从零开始的Linux学习第十三天:VSFTP服务传输文件

PS:我经过测试,本地用户登录跟虚拟用户登录无法共存。

二、TFTP简单文件传输协议

简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。顾名思义,它提供不复杂、开销不大的文件传输服务(可将其当作FTP协议的简化版本)。
TFTP的命令功能不如FTP服务强大,甚至不能遍历目录,在安全性方面也弱于FTP服务。而且,由于TFTP在传输文件时采用的是UDP协议,占用的端口号为69,因此文件的传输过程也不像FTP协议那样可靠。但是,因为TFTP不需要客户端的权限认证,也就减少了无谓的系统和网络带宽消耗,因此在传输琐碎(trivial)不大的文件时,效率更高
在RHEL 7系统中,TFTP服务是使用xinetd服务程序来管理的。xinetd服务可以用来管理多种轻量级的网络服务,而且具有强大的日志功能。简单来说,在安装TFTP软件包后,还需要在xinetd服务程序中将其开启,把默认的禁用(disable)参数修改为no:
从零开始的Linux学习第十三天:VSFTP服务传输文件
重启xinetd服务并将它添加到系统的开机启动项中,以确保TFTP服务在系统重启后依然处于运行状态。考虑到有些系统的防火墙默认没有允许UDP协议的69端口,因此需要手动将该端口号加入到防火墙的允许策略中:
从零开始的Linux学习第十三天:VSFTP服务传输文件
TFTP的根目录为/var/lib/tftpboot。
TFPT命令中可用的参数及作用:
从零开始的Linux学习第十三天:VSFTP服务传输文件
从零开始的Linux学习第十三天:VSFTP服务传输文件