···························································· 
第5 章 chapter5 
FTP服务器搭建与应用
教学目标与要求
文件传输协议(FileTransferProtocol,FTP)服务是Internet上最早提供的服务之
一,应用非常广泛,至今它仍是最基本的应用之一。FTP提供了在计算机网络上任意两
台计算机之间相互传输文件的机制。由于FTP操作性好,开放性强,在Internet上进行
信息传递与共享非常方便,所以目前越来越多的FTP服务器已连入Internet,实现了资
源共享。
本章将介绍FTP的基本概念、VSFTP服务器的搭建及访问FTP服务器的方法等。
通过本章的学习,读者应该做到: 
. 了解FTP的基本原理。
. 掌握安装和启动默认的VSFTP服务。
. 掌握修改配置文件的方法。
. 了解VSFTP两种运行模式的区别。
. 熟练掌握各种FTP服务器的配置方法。
教学重点与难点
配置不同安全级别的FTP服务器。
5.1 FTP 简介
FTP能够使用户不需要了解远程主机操作系统的操作方法,就可直接完成主机之间
可靠的文件传输。同时,FTP允许用户使用一组标准的命令集,在远程主机访问文件,从
而使不同操作系统的客户都可与文件服务器进行通信,降低了用户工作的复杂度,保证
了操作的通用性。
FTP是TCP/IP应用层上的具体应用,即它工作在OSI模型或TCP/IP模型的应用
层。FTP使用传输层的TCP,建立连接可靠的链路。使用FTP可以高效地从FTP服务
器下载大信息量的数据文件,将远程主机上的文件复制到自己的计算机上,达到资源共享

1 52 ◆ L inux 网络服务器配置、管理与实践教程(第3 版) 
和传递信息的目的。
5.1.1 FTP 的工作原理
1.工作原理 
FTP服务与大多数Internet服务类似,也是基于客户端/服务器(C/S)模式的。客户
端通过支持FTP的程序连接到主机上的FTP服务器;用户通过客户端程序向服务器程
序发出命令;服务器程序执行用户发出的命令,然后将执行结果返回给客户端。
客户端与服务器建立TCP连接时必须各自使用一个端口。FTP有两个连接:一个
是控制连接;另一个是数据传输。因此,FTP需要两个端口,其中一个端口作为控制连接
端口,即21端口,用于发送指令给服务器以及等待服务器响应;另外一个端口作为数据
传输端口,即20端口(仅用PORT模式),用于建立数据传输通道,主要实现在客户端从
服务器获得文件,从客户端向服务器发送文件,从服务器向客户端发送文件或目录列表。
图5.1 FTP的工作流程
在FTP连接过程中,控制连线始终保
持连接状态;而数据连线是需要时才建立
的,即有传输文件时才建立连接;若文件传
输完毕,则中断此连接。结束FTP操作时, 
控制连线也相应结束。FTP的工作流程如
图5.1所示。
2.登录流程
FTP的通信过程由多个步骤构成。从建立连接、传输文件到断开连接,这些不同的
动作通过FTP的指令完成。当客户端与FTP通信时,首先要进行身份验证,如图5.2 
所示。
图5.2 FTP身份验证
(1)客户端向服务器发送建立TCP连接的请求。
(2)服务器响应220代码,表明21号端口工作正常,处于监听状态。
(3)客户端以User指令发送用户名。
(4)服务器响应331代码,通知客户端发送密码。
(5)客户端使用pass指令发送密码。

第◆5 章 FTP 服务器搭建与应用1 53 
(6)服务器验证客户端的用户名和密码匹配关系。如果成功,则响应230代码,通知
客户端身份验证通过。
(7)客户端提交pwd指令,请求显示当前路径。
(8)服务器响应257代码,显示当前工作目录。
5.1.2 FTP 传输模式
FTP的任务是把文件从一台计算机传送到另一台计算机。FTP的传输有两种方
式:ASCII码传输模式和二进制传输模式。
1.ASCII码传输模式
ASCII码传输模式即文本传输模式。假设用户正在复制的文件是包含简单ASCII 
码的文本文件,如果客户端和服务器上运行的操作系统不相同,那么对文件格式的处理
也会有所不同。FTP在文件传输时会自动调整文件内容,并把文件转换成另一台主机存
储文本文件的格式。但必须注意的是,不是所有文件都可以转换,很多情况下,要传输的
文件不是文本文件,而可能是可执行文件、压缩文件或图片文件等。复制这些非文本文
件时就不要用ASCII码传输模式了,此时必须使用二进制传输模式。
2.二进制传输模式
二进制传输模式是指在文件的传输过程中保存文件的位序一致,并且原始文件和副
本一一对应。如果两台操作系统不同的主机用二进制传输模式来传输文件,则对于保存
文件的位序是没意义的。若传送可执行文件、压缩文件和图片文件,就必须使用二进制
模式。如果用ASCII码模式传输,则会显示一堆乱码。如果传送的这两台机器类型相
同,则二进制模式对文本文件和数据文件都是可以有效完成的。
5.1.3 FTP 连接模式
FTP主要支持两种连接模式:一种是主动传输模式(PORT 模式);另一种是被动传
输模式(PASV 模式)。主动传输模式FTP的客户端发送PORT 命令到FTP服务器。
被动传输模式FTP的客户端发送PASV 命令到FTP服务器。
1.主动传输模式
主动传输模式是指FTP 客户端随机开启一个端口(通常是1024号以上端口)向
FTP服务器的TCP21端口发起控制连接请求,在FTP的控制连接成功建立后,如果客
户端再提出目录列表、传输文件请求时,那么客户端会在这个控制通道上发送PORT 命
令,此命令通常包含客户端用哪个端口接收数据。当FTP服务器接收到客户端发送的
PORT命令时,与其进行协商确定,然后FTP服务器使用TCP20号端口作为服务器端
的数据连接端口与客户端建立起数据连接。20号端口没有监听进程来监听客户请求,它
只用于连接源地址是服务器端的情况,如图5.3所示。在主动传输模式下,FTP的数据
连接与控制连接方向相反,控制连接是由客户端主动发起的,而数据传输的连接是由服
务器向客户端发起的。客户端的连接端口由服务器端和客户端通过协商确定。

◆ 

154 
 
L 
inux 
网络服务器配置、管理与实践教程(第
3 
版)


图5.

3 
FTP 
主动模式

2. 
被动传输模式
被动传输模式在建立控制通道的时候与主动传输模式类似,不同的是,被动传输模
式使用PASV 命令,而不是PORT 命令。在FTP 的控制连接成功建立后,客户端在提出
目录列表及传输文件请求时,客户端会在这个控制通道上发送PASV 命令。当FTP 服
务器接收到PASV 命令后,就处于被动传输模式。也就是说,FTP 服务器等待客户与其
联系。此时,FTP 服务器在非20 号端口(通常是1024 号以上端口)上监听客户端的请
求。FTP 服务器将使用该端口进行数据的传送,此时FTP 服务器已经不再需要建立一
个新的和客户端之间的连接,如图5.FTP 的数据连接与控

4所示。在被动传输模式下,
制连接方向一样,控制连接和数据传输的连接都是由客户端向服务器发起的。


图5.

4 
FTP 
被动模式

说明: 

(1)被动传输模式受到很多防火墙的限制,通常防火墙都不允许接受外部发起的连
接,而主动传输模式下也有许多内网的客户端因为防火墙的限制不能用PORT 模式登录
FTP 服务器,从而使得服务器的TCP20 号端口不能与客户端建立数据连接。这也是可
能造成无法工作的原因。

第◆5 章 FTP 服务器搭建与应用1 55 
(2)FTP服务器被动模式需要使用大于1024号的端口,所以在配置服务器端的防
火墙时,请开启1024号以上的端口,并适当限制范围;否则,客户端将无法使用被动模式
连接FTP服务器。
其实,除上述两种模式外,还有一种单端口模式。在该模式的数据连接请求由FTP 
服务器发起。使用该传输模式时,客户端的控制连接端口和数据连接端口是一样的。由
于这种模式无法在短时间连续输入数据、传输命令,所以该模式不常用。
5.1.4 FTP 用户分类
1.匿名用户 
客户端访问FTP 资源时,可以在没有服务器账户及密码的情况下,使用匿名
(anonymous)身份获取公共资源,但权限有限。
2.实体用户
实体用户(realuser)是指FTP服务器的本地账户,使用/etc/passwd中的用户名为
认证方式。
3.虚拟用户
区别于实体用户,FTP支持建立专有用户,将账号及密码保存在数据库中,采用非系
统账户访问服务器资源。相对于FTP的实体用户而言,虚拟用户只能访问FTP共享资
源,增强了系统安全性。并且,客户端使用虚拟用户登录,需要提交账号和密码,管理员
可以根据这些账号进行策略设置,从而增加了对用户和下载的可管理性。考虑到FTP 
服务器的安全性以及管理因素,选择虚拟用户登录是一个非常可靠的方案。
5.2 安装FTP 服务器
Linux下的FTP 服务器软件有很多,其中比较知名的有WU-FTP(Washington 
University-FTP)和VSFTP。WU-FTP是一个很不错的FTP服务器软件,其功能非常
强大,并且能够很好地运行于多种UNIX 类型的操作系统。不过,作为后起之秀的
VSFTP现在也越来越流行了。VSFTP中VS的意思是VerySecure。从名称可以看出, 
VSFTP设计的出发点就是安全性,下面以VSFTP配置FTP服务器。
安装VSFTP服务之前,首先安装VSFTP软件包。 
vsftpd-2.0.5-10.el5.i386 
5.2.1 安装VSFTP 
如果在安装Linux系统时没有选择安装VSFTP服务,此时就要进行安装。如果无
法确认是否安装了该软件,或者不知道安装了哪个版本,可以输入以下命令查看。

1 56 ◆ L inux 网络服务器配置、管理与实践教程(第3 版) 
[root@zhou~]#rpm -qa | grep vsftpd 
图5.5 VSFTP安装包
查看结果如下,表明系统已经安装了vsftpd-2.0.5- 
10.el5。 
vsftpd-2.0.5-10.el5 
如果没有安装VSFTP服务程序的RPM 安装
包文件,则可以通过RedHatEnterpriseLinux5的
安装盘(DVD 版第一张)进行安装。加载光驱后在
光盘的Server目录下找到vsftpd-2.0.5-10.el5.ppc. 
rpm 安装包文件进行安装,如图5.5所示。
5.2.2 启动与停止VSFTP 
1.启动VSFTP 
service vsftpd start 或/etc/rc.d/init.d/vsftpd start 
2.关闭VSFTP 
service vsftpd stop 或/etc/rc.d/init.d/vsftpd stop 
3.重新启动VSFTP 
service vsftpd restart 或/etc/rc.d/init.d/vsftpd restart 
4.重新加载VSFTP 
service vsftpd reload 或/etc/rc.d/init.d/vsftpd reload 
5.自动加载 
Chkconfig -level 3 vsftpd on #运行级别3 自动加载
Chkconfig -level 3 vsftpd of #运行级别3 不自动加载
或用ntsysv命令,利用图形界面对VSFTP自动加载进行配置。
5.3 FTP 常规服务器配置
要深入掌握VSFTP的配置,首先要了解其文件目录结构,如表5.1 所示,可见其目
录文件结构非常简洁。

第◆5 章 FTP 服务器搭建与应用1 57 
表5.1 VSFTP的文件目录结构
目 录说 明
/usr/sbin/vsftpd VSFTPD的主程序
/etc/rc.d/init.d/vsftpd 启动VSFTPD的脚本
/etc/vsftpd/vsftpd.conf 主配置文件
/etc/pam.d/vsftpd PAM 认证文件
/var/ftp 匿名用户的主目录
/var/ftp/pub 匿名用户的下载目录
/etc/vsftpd/ftpusers 禁止使用VSFTPD的用户列表文件
/etc/vsftpd/user_list 禁止或允许使用VSFTPD的用户列表文件 
其中VSFTP文件主要有以下三个。
1.vsftpd.conf 
vsftpd.conf是vsftpd的核心配置文件,位于/etc/vsftpd/目录下。
2./etc/vsftpd.user_list 
/etc/vsftpd.user_list为禁止或允许使用vsftpd的用户列表文件。
3./var/ftp 
/var/ftp为默认情况下匿名用户的根目录。
5.3.1 主配置文件vsftpd.conf 
VSFTP与Samba有很多类似的地方。它们相似的地方主要就是配置文件的格式。
整个配置文件都由很多字段组合而成,其格式如下: 
定段= 设定值
这与Samba几乎一样。需要特别说明的是,“=”两边没有空格,与Samba不同。安装
vsftpd的主程序后,主配置文件就自动建立好了,其中以“#”开头的表示注释。整个配
置文件一共有117行。打开vsftpd.conf可查看其内容(部分)。 
[root@zhou ~]#vi /etc/vsftpd/vsftpd.conf 
#Allow anonymous FTP?(Beware-allowed by default if you comment this out). 
anonymous_enable=NO 
##
Uncomment this to allow local users to log in. 
local_enable=YES 
##
Uncomment this to enable any form of FTP write command. 
write_enable=YES 
下面先对配置文件中的常用命令进行介绍。
1.进程选项 
Listen(YES|NO)

1 58 ◆ L inux 网络服务器配置、管理与实践教程(第3 版) 
作用:Listen字段表示是否使用stand-alone模式启动VSFTPD,而不是使用超级进
程(xinetd)控制它(VSFTPD推荐使用stand-alone方式)。
YES:使用standalone启动VSFTPD。
NO:不使用standalone启动VSFTPD。
【例5.1】 采用独立进程来控制VSFTPD。 
listen=YES 
2.登录和访问控制选项
1)anonymous_enable(YES|NO) 
作用:anonymous_enable字段用于控制是否允许匿名用户登录。
YES:表示允许;NO:表示不允许。
2)local_enable(YES|NO) 
作用:local_enable字段用于控制是否允许本地用户登录。
YES:表示允许;NO:表示不允许。
【例5.2】 允许本地用户登录FTP。 
Local_enable=YES 
3)pam_service_name 
作用:用于设置在使用PAM 模块进行验证时所使用的PAM 配置文件名。
该字段默认值为vsftpd,而默认的PAM 配置文件为/etc/pam.d/vsftpd。
4)userlist_enable(YES|NO) 
作用:userlist_enable字段表示是否使用控制用户登录的用户列表。用户列表由
userlist_file字段所指定。如果用户出现在列表中,则在登录FTP服务器时被vsftpd禁
止登录。
YES:表示允许; 
NO:表示不允许。
【例5.3】 设置一个禁止登录的用户列表文件/etc/vsftpd/user_list,并让该文件可
以正常工作。 
userlist_enable=YES 
userlist_file=/etc/vsftpd/user_list 
5)tcp_wrappers(YES|NO) 
作用:是否在VSFTPD中使用tcp_wrappers远程访问控制机制。
YES:表示使用; 
NO:表示不使用。
3.匿名用户选项
匿名用户访问服务器相关设置,使用以下这些字段的时候,必须设置anonymous_

第◆5 章 FTP 服务器搭建与应用1 59 
enable=YES。 
anou_root 
作用:设置匿名用户的根目录,也就是匿名用户登录所在的目录。
【例5.4】 设置匿名用户的根目录为/var/ftp/temp。 
anou_root=/var/ftp/temp 
4.本地用户选项
本地用户访问服务器的相关设置,使用以下这些字段时,必须将local_enable设置
为YES。 
local_umask 
作用:local_umask字段用于设置本地用户新建文件的umask数值。大多数FTP 
服务器都在使用022,也可以根据需要自行修改。
5.目录选项
影响目录设置的相关字段有 
dirmessage_enable(YES|NO) 
作用:dirmessage_enable字段用于设置是否开启目录提示功能。
YES:表示开启; 
NO:表示不开启。
说明:如果开启了目录提示功能,则当用户进入某一目录时,会检查该目录下是否有
message_file字段所指定的文件。如果有,则会将文件内容显示在屏幕上。
6.文件传输选项
文件传输的字段有 
write_enable(YES|NO) 
作用:write_enable字段用于设置使用者是否有写权限。
YES:表示可以删除和修改文件; 
NO:表示不可以删除或修改文件。
7.日志选项
有关日志行为的字段有以下两个。
1)xferlog_enable(YES|NO) 
作用:xferlog_enable字段表示是否设置用于记录下载和上传的日志文件。
YES:表示启用; 
NO:表示不启用。

1 60 ◆ L inux 网络服务器配置、管理与实践教程(第3 版) 
说明:日志文件的名称和位置需要由xferlog_file字段来设置。
【例5.5】 设置记录下载和上传的日志文件/var/log/vsftp.log。 
xferlog_enable=YES 
xferlog_file=/var/log/vsftp.log 
2)xferlog_std_format(YES|NO) 
作用:xferlog_std_format字段用于设置日志的格式是否采用标准格式。
YES:表示使用标准格式; 
NO:表示不使用标准格式。
8.网络选项
与网络设置相关的字段有以下两个。
1)connect_from_port_20 
作用:设置以port模式进行数据传输时使用20端口。
YES:表示使用; 
NO:表示不使用。
2)connect_timeou 
作用:设置客户端尝试连接vsftpd命令通道的超时时间,以秒为单位。
说明:如果客户端在尝试连接vsftpd的命令通道时超时,则强制断开。
5.3.2 匿名账号FTP 服务器
匿名账号FTP服务器面向的用户很不固定。为了方便管理,需使匿名用户可以访
问FTP服务。根据不同的应用环境,可以对匿名账号FTP服务器进行不同的设置。
1.与匿名相关的常用字段
要使匿名用户能访问服务器,必须把anonymous_enable字段设置为YES。在主配
置文件中,和匿名用户相关的常用字段还有如下5个。
1)anon_mkdir_write_enable(YES|NO) 
作用:控制是否允许匿名用户创建目录。
YES:表示允许; 
NO:表示不允许。
2)anon_root(YES|NO) 
作用:用于设置匿名用户的根目录。
YES:表示允许; 
NO:表示不允许。
3)anon_upload_enable(YES|NO) 
作用:控制是否允许匿名用户上传文件。
YES:表示允许; 
NO:表示不允许。
4)anon_world_readable_only(YES|NO)