11.1 文件传输协议

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

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

FTP连接过程

图11-1 FTP协议的传输拓扑

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

主动模式:FTP服务器主动向客户端发起连接请求。

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

第8章在学习防火墙服务配置时曾经讲过,防火墙一般是用于过滤从外网进入内网的流量,因此有些时候需要将FTP的工作模式设置为主动模式,才可以传输数据。

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

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

  1. [root@linuxprobe ~]# yum install vsftpd
  2. Loaded plugins: langpacks, product-id, subscription-manager
  3. ………………省略部分输出信息………………
  4. ================================================================================
  5. Package Arch Version Repository Size
  6. ================================================================================
  7. Installing:
  8. vsftpd x86_64 3.0.2-9.el7 rhel 166 k
  9. Transaction Summary
  10. ================================================================================
  11. Install 1 Package
  12. Total download size: 166 k
  13. Installed size: 343 k
  14. Is this ok [y/d/N]: y
  15. Downloading packages:
  16. Running transaction check
  17. Running transaction test
  18. Transaction test succeeded
  19. Running transaction
  20. Installing : vsftpd-3.0.2-9.el7.x86_64 1/1
  21. Verifying : vsftpd-3.0.2-9.el7.x86_64 1/1
  22. Installed:
  23. vsftpd.x86_64 0:3.0.2-9.el7
  24. Complete!

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

  1. [root@linuxprobe ~]# iptables -F
  2. [root@linuxprobe ~]# service iptables save
  3. iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

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

  1. [root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
  2. [root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
  3. [root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.conf
  4. anonymous_enable=YES
  5. local_enable=YES
  6. write_enable=YES
  7. local_umask=022
  8. dirmessage_enable=YES
  9. xferlog_enable=YES
  10. connect_from_port_20=YES
  11. xferlog_std_format=YES
  12. listen=NO
  13. listen_ipv6=YES
  14. pam_service_name=vsftpd
  15. userlist_enable=YES
  16. tcp_wrappers=YES

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

表11-1 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为不限制