天天看点

使用Vsftpd服务传输文件

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

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中,方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术,因此得到了广大用户的青睐。FTP协议的传输拓扑如图11-1所示。

使用Vsftpd服务传输文件

 FTP协议的传输拓扑

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式,第8章在学习防火墙服务配置时曾经讲过,防火墙一般是用于过滤从外网进入内网的流量,因此有些时候需要将FTP的工作模式设置为主动模式,才可以传输数据。

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

由于FTP、HTTP、Telnet等协议的数据都是经过明文进行传输,因此从设计的原理上就是不可靠的,但人们又需要解决文件传输的需求,因此便有了vsftpd服务程序。vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,能够让管理者自行决定是公开匿名、本地用户还是虚拟用户的验证方式,这样即便被骇客拿到了我们的账号密码,也不见得能登陆的了服务器。

在配置妥当软件仓库之后,就可以安装vsftpd服务程序了,yum与dnf命令都可以,优先选择用dnf命令方式。

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

然后再把FTP协议添加到firewalld服务的允许列表中,前期准备工作一定要做充足:

vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)内容总长度达到127行,但其中大多数参数在开头都添加了井号(#),从而成为注释信息,大家没有必要在注释信息上花费太多的时间。我们可以在grep命令后面添加-v参数,过滤并反选出没有包含井号(#)的参数行(即过滤掉所有的注释信息),然后将过滤后的参数行通过输出重定向符写回原始的主配置文件中,只剩下12行有效参数了,马上就不紧张了:

vsftpd服务程序主配置文件中常用的参数以及作用。当前大家只需要简单了解即可,在后续的实验中将演示这些参数的用法,以帮助大家熟悉并掌握。

                                   vsftpd服务程序常用的参数以及作用

参数

作用

listen=[YES|NO]

是否以独立运行的方式监听服务

listen_address=IP地址

设置要监听的IP地址

listen_port=21

设置FTP服务的监听端口

download_enable=[YES|NO]

是否允许下载文件

userlist_enable=[YES|NO]

userlist_deny=[YES|NO]

设置用户列表为“允许”还是“禁止”操作

max_clients=0

最大客户端连接数,0为不限制

max_per_ip=0

同一IP地址的最大连接数,0为不限制

anonymous_enable=[YES|NO]

是否允许匿名用户访问

anon_upload_enable=[YES|NO]

是否允许匿名用户上传文件

anon_umask=022

匿名用户上传文件的umask值

anon_root=/var/ftp

匿名用户的FTP根目录

anon_mkdir_write_enable=[YES|NO]

是否允许匿名用户创建目录

anon_other_write_enable=[YES|NO]

是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)

anon_max_rate=0

匿名用户的最大传输速率(字节/秒),0为不限制

local_enable=[YES|NO]

是否允许本地用户登录FTP

local_umask=022

本地用户上传文件的umask值

local_root=/var/ftp

本地用户的FTP根目录

chroot_local_user=[YES|NO]

是否将用户权限禁锢在FTP目录,以确保安全

local_max_rate=0

本地用户最大传输速率(字节/秒),0为不限制

匿名访问模式

前文提到,在vsftpd服务程序中,匿名开放模式是最不安全的一种认证模式。任何人都可以无需密码验证而直接登录到FTP服务器。这种模式一般用来访问不重要的公开文件(在生产环境中尽量不要存放重要文件)。当然,如果采用第8章中介绍的防火墙管理工具(如Tcp_wrappers服务程序)将vsftpd服务程序允许访问的主机范围设置为企业内网,也可以提供基本的安全性。

vsftpd服务程序默认关闭了匿名开放模式,需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。需要注意的是,针对匿名用户放开这些权限会带来潜在危险,我们只是为了在Linux系统中练习配置vsftpd服务程序而放开了这些权限,不建议在生产环境中如此行事。表11-2罗列了可以向匿名用户开放的权限参数以及作用。

表11-2                                 向匿名用户开放的权限参数以及作用

anonymous_enable=YES

允许匿名访问模式

anon_upload_enable=YES

允许匿名用户上传文件

anon_mkdir_write_enable=YES

允许匿名用户创建目录

anon_other_write_enable=YES

允许匿名用户修改目录名称或删除目录

在vsftpd服务程序的主配置文件中正确填写参数,然后保存并退出。还需要重启vsftpd服务程序,让新的配置参数生效。在此需要提醒各位读者,在生产环境中或者在RHCSA、RHCE、RHCA认证考试中一定要把配置过的服务程序加入到开机启动项中,以保证服务器在重启后依然能够正常提供传输服务:

现在就可以在客户端执行ftp命令连接到远程的FTP服务器了。在vsftpd服务程序的匿名开放认证模式下,其账户统一为anonymous,密码为空。而且在连接到FTP服务器后,默认访问的是/var/ftp目录。可以切换到该目录下的pub目录中,然后尝试创建一个新的目录文件,以检验是否拥有写入权限:

系统显示拒绝创建目录!我们明明在前面清空了iptables防火墙策略,而且也在vsftpd服务程序的主配置文件中添加了允许匿名用户创建目录和写入文件的权限啊。建议先不要着急往下看,而是自己思考一下这个问题的解决办法,以锻炼您的Linux系统排错能力。

前文提到,在vsftpd服务程序的匿名开放认证模式下,默认访问的是/var/ftp目录。查看该目录的权限得知,只有root管理员才有写入权限。怪不得系统会拒绝操作呢!下面将目录的所有者身份改成系统账户ftp即可,这样应该可以了吧?

系统再次报错!尽管在使用ftp命令登入FTP服务器后,再创建目录时系统依然提示操作失败,但是报错信息却发生了变化。在没有写入权限时,系统提示“权限拒绝”(Permission denied)所以刘遄老师怀疑是权限的问题。但现在系统提示“创建目录的操作失败”(Create directory operation failed),想必各位读者也应该意识到是SELinux服务在“捣乱”了吧。

下面使用getsebool命令查看与FTP相关的SELinux域策略都有哪些:

我们可以根据经验(需要长期培养,别无它法)和策略的名称判断出是ftpd_full_access--> off策略规则导致了操作失败。接下来修改该策略规则,并且在设置时使用-P参数让修改过的策略永久生效,确保在服务器重启后依然能够顺利写入文件。

等SELinux域策略修改完毕,现在便能够顺利执行文件创建、修改及删除等操作了:

在上面的操作中,由于权限的不足所以将/var/ftp/pub目录的所有者设置成了ftp用户本身。而除了这种方法外,也可以通过设置权限的方法让其它用户获取到写入权限,例如777这样的权限。但是由于vsftpd服务自身带有安全保护机制,不要对/var/ftp直接修改权限,有可能导致服务被“安全锁定”而不能登录,一定要记得是里面的pub目录哦:

使用Vsftpd服务传输文件
使用Vsftpd服务传输文件

此文章仅记录自己的一个学习过程; 逆水行舟

继续阅读