Red Hat Enterprise Linux 5.0服务器构建与故障排除
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第5章 FTP服务器的安装和故障排除

本章要点

● FTP的工作原理。

● 配置Vsftpd服务器。

● 使用FTP客户端工具。

● FTP常见故障排除。

5.1 FTP的工作原理

5.1.1 FTP简介

起初,FTP并不是应用于IP网络上的协议,而是ARPANET网络中计算机间的文件传输协议。ARPANET是美国国防部组建的老网络,于1960年~1980年使用。那时,FTP的主要功能是在主机间高速可靠地传输文件,目前FTP仍然保持其可靠性。即使在今天,它还允许文件远程存取。这使得用户可以在某个系统上工作,而将文件存储在其他系统中。例如,如果某用户运行Web服务器,需要从远程主机上取得HTML文件和CGI程序到本机上工作,则需要从远程存储站点获取文件。

FTP是TCP/IP的一种具体应用,它工作在OSI模型的第7层,TCP/IP模型的第4层,即应用层上。FTP使用TCP传输,而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的“三次握手”的过程。它带来的意义在于客户端与服务器之间的连接是可靠的,而且是面向连接的,为数据的传输提供了可靠的保证。采用FTP可使Internet用户高效地从网上的FTP服务器下载大信息量的数据文件,将远程主机上的文件复制到自己的计算机上,以达到资源共享和传递信息的目的。由于FTP的使用使得Internet上出现大量为用户提供的下载服务,Internet成为了一个巨型的软件仓库。FTP在文件传输中还支持断点续传功能,可以大幅度地减小CPU和网络带宽的开销。

5.1.2 FTP的功能

在网络上的大部分文件,无论通过FTP客户端软件,还是WWW来传送,最终都是通过FTP实现的。FTP有两个主要功能:一是可以在两台完全不同的计算机(例如,UNIX/Linux大型计算机和个人计算机PC)之间传送文件;二是提供许多公用文件共同享用。上述两大功能使得FTP非常有用,据统计,Internet上近1/3的通信使用FTP。

FTP不仅可以用来传送文本文件,也可以传送二进制文件,包括各种文章、程序、数据、声音和图像等各种类型的文件。在Internet上,一般FTP服务器还提供各种各样的文件目录和列表,其中有许多可供下载的文件。用户只要安装一个FTP客户端程序(如CuteFTP或LeapFTP)即可访问这些服务器,需要时也可以使用FTP客户端程序将个人计算机上的文件上传到FTP服务器上。我们把各类远程网络上的文件传送到本地计算机的过程称为“下载”,用户通过FTP将自己本地机上的文件传送到远程网络上的某台计算机上的过程称为“上传”。例如,我们说用户从某个共享网站下载软件,或者将自己的主页上传到某个网站。

5.1.3 FTP服务器登录方式的分类

FTP服务实际上就是将各种可用资源放在各个FTP主机中,网络上的用户可以通过Internet连接这些主机,并且使用FTP将需要的文件复制到自己的计算机中。在使用FTP传送文件之前,最主要的步骤就是如何连接Internet上的FTP服务器,即登录(Login)到该服务器。通常用户在需要下载的FTP服务器上输入许可的账号(account)和口令(password),得到该服务器许可后即可进入。

FTP服务器分为两种,一种为一般的FTP服务器,进入这种服务器时必须拥有该主机的账号和口令;另一种为匿名FTP服务器(称为“anonymous FTP服务器”),登录此类FTP服务器时,用户只要使用“guest”或“anonymous”为账号,并以自己的E-mail地址为口令即可。当用户登录到某台FTP服务器时,如果用“guest”或“anonymous”为账号均无法进入,则表明该服务器不是匿名FTP服务器。实际上,匿名FTP是一种开放式账号的FTP服务器,它可以被网络上的任何使用者所用,与非匿名的FTP不同的只是登录时的账号和口令不同。

5.1.4 FTP的工作原理

FTP标准是在RFC959中说明的,该协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的标准。一般来说,要传输文件的用户需先经过认证后才能登录FTP服务器,访问远程服务器上的文件。大多数的FTP服务器往往提供一个“guest”的公共账户来允许没有FTP服务器账户的用户可以访问该FTP服务器。一个FTP模型通常包括5个软件元素的交互,如图5-1所示。就模型而言,从1973年以来并没有什么变化。

图5-1 FTP模型

表5-1所示为交互元素列表。

表5-1 交互元素列表

在一个FTP会话中会存在两个独立的网络连接:一个是由两端的PI使用的;另一个是由两端的DTP使用的。PI之间的连接一般被称为“控制连接”(control connection),DTP之间的连接被称为“数据连接”(data connection)。通常情况下,FTP服务器监听端口号21,等待控制连接建立请求。当客户端连接请求到达时,会在客户端和FTP服务器之间建立一个控制连接。而数据连接端口号的选择依赖于控制连接上的命令,通常是客户端发送一个控制消息来指定客户端需要建立一个数据连接来传输FTP数据(如下载/上传一个文件并显示当前目录的内容等都需要建立数据连接来传输数据)。在该消息中指定了客户端监听并等待连接的端口号。而服务器从控制连接收到该命令,向客户端发起一个连接请求到消息中指定的端口号,客户端收到该请求以后就会建立一个数据连接。连接建立以后,服务器或客户端就会主动通过该连接发送数据(可能是要传输的文件,或用户在命令行上发出的ls命令的输出)。

数据传输和控制命令传输使用独立的不同连接的优点是两个连接可以选择不同的服务,如控制连接需要更小的延迟时间,数据连接需要更大的数据吞吐量,可以避免保证数据流中命令的透明性及逃逸(escape,指为了区别命令和数据,需要对数据中和命令相同的内容做一定的处理以和命令区分开来)的麻烦。当传输建立时,总是由客户端首先发起,然而客户端和服务器都可能是数据发送者。除了传输用户请求下载的文件,数据传输过程同样在客户端请求显示服务器目录结构(ls命令)时建立。

1.控制连接

客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP 21端口发起一个建立连接的请求。FTP服务器接受来自客户端的请求,完成连接的建立过程,这样的连接称为“FTP控制连接”。

2.数据连接

FTP控制连接建立之后,即可开始传输文件,传输文件的连接称为“FTP数据连接”。FTP数据连接即FTP传输数据的过程,它有3种传输模式,即主动传输模式(PORT)、被动传输模式(PASSIVE,简称PASV)和单端口模式。

(1)主动传输模式。

当FTP的控制连接建立,客户提出目录列表并传输文件时,客户端发出PORT命令与服务器协商,FTP服务器使用一个标准端口20作为服务器的数据连接端口(ftp-data)与客户建立数据连接。端口20只用于连接源地址是服务器的情况,并且端口20没有监听进程而是监听客户请求。在主动传输模式下,FTP的数据连接和控制连接方向相反,由服务器向客户端发起一个用于数据传输的连接,客户端的连接端口由服务器和客户端通过协商确定。即FTP服务器使用20端口与客户端的临时端口连接并传输数据,客户端只是处于接收状态。

(2)被动传输模式。

当FTP的控制连接建立,客户提出目录列表并传输文件时,客户端发送PASV命令使服务器处于被动传输模式,FTP服务器等待客户与其联系。FTP服务器在非20端口的其他数据传输端口上监听客户请求。在被动传输模式下,FTP的数据连接和控制连接方向一致。由客户端向服务器发起一个用于数据传输的连接,客户端的连接端口是发起该数据连接请求时使用的端口。当FTP客户在防火墙之外访问FTP服务器时,需要使用被动传输模式。即FTP服务器打开一个临时端口等待客户端与其连接并传输数据。服务器并不参与数据的主动传输,只是被动接收。

(3)单端口模式。

该模式的数据连接请求由FTP服务器发起,使用该传输模式时,客户端的控制连接端口和数据连接端口一致。因为这种模式无法在短时间连续输入数据并传输命令,因此并不常用。

5.1.5 FTP的典型消息和子命令

1.典型消息

下面是一些典型的消息。

(1)FTP:数字代码的意义。

(2)110:重新启动标记应答。

(3)120:服务在多久时间内ready。

(4)125:数据链路埠开启,准备传送。

(5)150:文件状态正常,开启数据连接端口。

(6)200:命令执行成功。

(7)202:命令执行失败。

(8)211:系统状态或是系统求助响应。

(9)212:目录的状态。

(10)213:文件的状态。

(11)214:求助的信息。

(12)215:名称系统类型。

(13)220:新的联机服务ready。

(14)221:服务的控制连接埠关闭,可以注销。

(15)225:数据连接开启,但无传输动作。

(16)226:关闭数据连接端口,请求的文件操作成功。

(17)227:进入passive mode。

(18)230:使用者登录。

(19)250:请求的文件操作完成。

(20)257:显示目前的路径名称。

(21)331:用户名称正确,需要密码。

(22)332:登入时需要账号信息。

(23)350:请求的操作需要进一步的命令。

(24)421:无法提供服务,关闭控制连接。

(25)425:无法开启数据链路。

(26)426:关闭联机,终止传输。

(27)450:请求的操作未执行。

(28)451:命令终止,有本地的错误。

(29)452:未执行命令,磁盘空间不足。

(30)500:格式错误,无法识别命令。

(31)501:参数语法错误。

(32)502:命令执行失败。

(33)503:命令顺序错误。

(34)504:命令所接的参数不正确。

(35)530:未登录。

(36)532:储存文件需要账户登录。

(37)550:未执行请求的操作。

(38)551:请求的命令终止,类型未知。

(39)552:请求的文件终止,存储位溢出。

(40)553:未执行请求的命令,名称不正确。

更加具体的详细信息可以参见RFC。

2.FTP命令和交互命令

FTP命令是Internet用户使用最频繁的命令之一,不论是在Linux、DOS,还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令。熟悉并灵活应用这些命令可以大大方便使用者,并收到事半功倍的效果。

格式:ftp [-dignv][主机名称或IP地址]

(1)-d:详细显示指令执行过程,便于排错或分析程序执行的情况。

(2)-i:关闭互动模式,不询问任何问题。

(3)-g:关闭本地主机文件名称支持特殊字符的扩充特性。

(4)-n:不使用自动登录。

(5)-v:显示指令执行过程。

FTP命令解释器使用户可与FTP客户端交互,它使用户可以通过命令打开/关闭特定连接、传输文件及改变传输文件类型等,而不需要断开FTP。下面列出了用户在交互模式下使用FTP时可使用的命令。

(1)!<local command>:在本地系统运行命令。

(2)$ < macro >:运行宏。

(3)account [password]:使用其他用户名/口令以获取额外的对远程系统的访问权限。

(4)ascii:将文件传输模式设为ASCII。

(5)append localfile [remotefile]:将本地文件添加到远程文件中(文件在远程计算机中)。

(6)bell:文件传输完成后响铃。

(7)binary:将文件传输模式设为二进制方式。

(8)bye, exit:退出,结束远程连接。

(9)case:打开case功能。

(10)close, disconnect:关闭远程连接。

(11)cd <directory>:改变远程系统目录名。

(12)cd up:进入父目录。

(13)debug <level>:设置调试级别。

(14)dir:打印路径名。

(15)delete <filename>:在远程计算机中删除文件。

(16)get <filename>:将文件从远程系统下载到本地系统。

(17)glob:在文件传输时使用通配符。

(18)hash:每传输1024个字节打印一个“#”。

(19)help:打印帮助文件。

(20)lcd < directory >:改变本地系统路径。

(21)ls:打印远程主机目录。

(22)lpwd:打印本地主机工作路径。

(23)macdef <macroname>:定义宏。

(24)mdel <filename (s)>:删除多个宏文件。

(25)mdir <filename (s)>:打印多个文件的路径。

(26)mget <filename (s)>:将多个文件从远程系统下载到本地系统。

(27)mkdir <directory>:在远程计算机上创建路径。

(28)mput <filename (s)>:将多个文件上传到远程计算机。

(29)open <site>:打开到<site>的连接。

(30)prompt:交互式提示。

(31)put <filename>:将文件上传到远程计算机。

(32)pwd:显示当前工作路径。

(33)user [user] [password]:登录到远程计算机系统。

(34)verbose:激活冗余模式。

通过使用上述命令,用户可以完成FTP的多种功能。

5.1.6 Linux服务器端的主要FTP软件

Linux下的FTP软件目前使用最多的是Wu-ftpd、Vsftpd和ProFTPD,它们在Internet中的占有率超过了95%。

Wu-ftpd全称为“Washington University FTP”,作为老牌FTP服务器软件,它广泛使用在各种Linux发行版本和其他类UNIX中。据官方网站的数据,Wu-ftpd在Internet中的占有率超过了50%。Wu-ftpd功能十分强大,可以构建多种类型的稳定强大的FTP服务器。Wu-ftpd菜单可以帮助用户轻松地实现对FTP服务器的配置,它支持构造安全方式的匿名FTP的访问,可以控制同时访问的用户的数量。同时限制可以允许访问的IP网段,并可以在一台主机上设置多个虚拟目录。

Wu-ftpd有3种注册方式,即匿名FTP、实际用户FTP和guest FTP。匿名FTP使用用户名“anonymous”和一个E-mail类型的口令注册。Wu-ftpd发布较早,组织较为零散,安全性较ProFTPD差。但稳定性较好,尤其同时联机人数增加时,效果很明显。Wu-ftpd要比ProFTPD好,不过在Wu-ftpd Server上内定不提供匿名服务。若要提供匿名FTP服务,需加装anonftp。在最新版中已经对系统安全性做了完善的修正,因此还是FTP服务器中的主流。如下是Wu-ftpd的一些功能和特点。

(1)可为不同网域设置不同存取权限和可存取时段。

(2)在下载档案时,提供自动压缩或解压功能。

(3)可记录FTP Server使用情况。

(4)可限定最多联机人数,以符合整体运行效能。

(5)显示相关信息,让使用者了解接收状态。

(6)可将FTP Server暂停,便于系统维护。

(7)支持虚拟FTP主机(Virtual FTP Servers)。

Wu-ftpd的最新版本为2.6.2,可访问网站http://www.wu-ftpd.org下载。

ProFTPD全称为“Professional FTP Daemon”,是针对Wu-ftpd的弱项而开发的。除了改进的安全性,还具备许多Wu-ftpd没有的特点,并可以stand-alone和xinetd模式运行。proFTPD已经成为继Wu-ftpd之后最为流行的FTP服务器软件,越来越多的网站选择用其构建安全高效的FTP站点。ProFTPD配置方便,并有MySQL和Quota模块可供选择,利用它们的完美结合可以实现非系统账号的管理和用户磁盘的限制。ProFTPD的特点如下。

(1)单配置文件,其设置指示和Apache有类似之处,非常容易配置。

(2)基于单个目录的.ftpaccess设置文件,与Apache的.htaccess文件类似。

(3)易于设置多个虚拟服务器和匿名FTP服务。

(4)可以设置为从xinetd启动,或者是独立FTP服务器两种运行方式。

(5)匿名FTP的根目录不需要任何特殊的目录结构、系统程序或其他系统文件。

(6)ncfptd不执行任何外部程序,从而减少了安全隐患。

(7)可以根据文件的属主情况或UNIX风格的访问控制来隐藏文件或目录。

(8)以非root身份运行,从而减少了安全隐患。

(9)强大的log功能,支持utmp/wtmp及Wu-ftpd格式的记录标准,并支持扩展功能的记录。

(10)支持Shadow密码,包括密码过期机制。

(11)遵从GPL版权,开放源代码。

ProFTPD的最新版本为1.2.10,可访问网站http://www.ProFTPD.org下载。

Vsftpd中Vs的意思是“Very secure”,从名称可以看出,软件的编写者非常注重其安全性。据官方网站的数据,一台Vsftpd服务器最多可以支持1500个并发用户,24小时可以保存2.6 TB数据。Vsftpd的功能和特点如下。

(1)是一个安全、高速且稳定的FTP服务器。

(2)可设定多个基于IP的虚拟FTP Server。

(3)设定匿名FTP服务器十分容易。

(4)匿名FTP的根目录不需要任何特殊的目录结构、系统程序或其他系统文件。

(5)不执行任何外部程序,从而减少了安全隐患。

(6)支持虚拟用户,以及每个虚拟用户具有独立的配置。

(7)可以设置为从xinetd启动,或者是独立FTP服务器两种运行方式。

(8)支持PAM或xinetd / tcp_wrappers的认证方式。

(9)支持带宽限制。

Vsftpd的最新版本为2.0.3,可从网站http://vsftpd.beasts.org/下载。

5.2 配置Vsftpd服务器

5.2.1 快速构建Vsftpd服务器

FTP服务器实现的基本功能是上传下载,下面来搭建一个可以实现下载功能的简易FTP服务器。

(1)安装FTP服务器。

如果在安装系统时没有选择安装FTP服务器,可以通过RHEL 5.0中的“添加/删除应用程序”工具安装。为此单击“主选单”→“系统设置”→“添加/删除应用程序”选项,在弹出的界面中选中FTP服务器,单击“更新”按钮即可。

如果无法确认是否安装了该软件,可以使用以下命令查看:

#rpm -qa|grep vsftpd
vsftpd-1.1.3-8

(2)启动FTP服务器。

套用RHEL 5.0的预设范例直接启动Vsftpd:

# /sbin/service vsftpd start
vsftpd启动vsftpd: [确定]

(3)创建文件。

在/var/ftp/pub目录下创建一个名为test.txt的文件,文件内容为“This is a test file”。

(4)测试。

使用FTP客户端登录到本地服务器,以匿名身份(anonymous)登录:

# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.

这样就成功地登录到FTP服务器,显示服务器目录列表如下:

ftp> ls
227 Entering Passive Mode (127,0,0,1,63,15)
150 Here comes the directory listing.
drwxr-xr-x  2 0  0  4096 Dec 04 01:35 pub
226 Directory send OK.

切换到pub目录下并显示目录内容,可以找到刚才创建的文件test.txt:

ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (127,0,0,1,232,34)
150 Here comes the directory listing.
-rw-r--r--  1 0  0  21 Dec 04 01:35 test.txt
226 Directory send OK.

下载test.txt文件:

ftp> mget test.txt
mget test.txt? y
227 Entering Passive Mode (127,0,0,1,186,210)
150 Opening BINARY mode data connection for test.txt (21 bytes).
226 File send OK.
21 bytes received in 0.0108 secs (1.9 Kbytes/sec)

查看本机目录内容,可以看到test.txt已成功下载到本机:

ftp> !ls
a   EIO_Binders initrd      mnt     proc     tftpboot lg.txt
bin  etc          lib         mymnt   root     tmp
boot home         lost+found  myshare sbin     usr
dev  id_dsas.pub misc       opt      test.txt var

尝试上传名为“ylg.txt”的文件,可以看到请求被拒绝:

ftp> put ylg.txt
local: ylg.txt remote: ylg.txt
227 Entering Passive Mode (127,0,0,1,243,10)
550 Permission denied.

退出登录:

ftp> bye
221 Goodbye.

由测试可以看出,已经可以下载文件,但不能上传文件(也不能在服务器中创建目录和文件),实际上这是一个专门提供下载服务的匿名FTP服务器。从上面的步骤可以看出,并不需要做什么配置就可以构建一个简易FTP服务器。这是因为Red Hat已经配置一个默认的FTP服务器,不过在实际应用中的大部分情况下这个简易的服务器并不能满足需求。

5.2.2 Vsftpd配置文件

Vsftpd服务器的文件结构如表5-2所示。

表5-2 Vsftpd服务器的文件结构

此外,还有一些说明文档和手册文件。

5.2.3 Vsftpd的设置选项

Vsftpd的配置文件/etc/vsftpd/vsftpd.conf是个文本文件,以“#”字符开始的行是注释行。每个选项设置为一行,格式为“option=value”,注意“=”号两边不能留空白符。除了这个主配置文件外,还可以为特定用户设定个人配置文件。Vsftpd包中所带的vsftpd.conf文件配置比较简单,我们可以根据实际情况对其进行设置,以使得Vsftpd更加实用。

1.连接选项

与建立FTP连接相关的选项如下。

(1)监听地址与控制端口。

● listen_address=ip address。

此选项在Vsftpd使用单独(stand-alone)模式下有效,它定义了在主机的哪个IP地址上监听FTP请求,即提供FTP服务。对于只有一个IP地址的主机,不需要使用此选项;对于多地址主机,不设置此选项,则监听所有IP地址。默认值为无。

● listen_port=port_value。

指定FTP服务器监听的端口号(控制端口),默认值为21。此选项在stand-alone模式下生效。

(2)FTP模式与数据端口。

FTP分为两类,即PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制连接的,并通过此连接传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式,PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20;PASV FTP由FTP客户端决定数据传输的端口。PASV FTP这种做法主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定二者之间的数据传输端口更为方便一些。

● port_enable=YES|NO。

如果要在数据连接时取消PORT模式时,设此选项为NO,默认值为YES。

● connetc_from_port_20=YES|NO。

控制连接以PORT模式传输数据时是否使用20端口,YES为使用;NO为不使用(默认值),但在RHL自带的vsftpd.conf文件中此选项设为YES。

● ftp_data_port=port number。

设定FTP数据传输端口值,默认值为20。此选项用于PORT FTP模式。

● port_promiscuous=YES|NO。

默认值为NO;为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上,应小心设置此选项。

● pasv_enable=YES|NO。

为YES,允许数据传输时使用PASV模式;为NO,不允许使用PASV模式。默认值为YES。

● pasv_min_port=port number, pasv_max_port=port number

在PASV模式下,设定建立数据传输所使用port范围的下界和上界,0表示任意(默认值)。把端口范围设在比较高的一段范围内,比如50000~60000,将有助于安全性的提高。

● pasv_promiscuous=YES|NO。

此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址,小心设置此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中,默认值为NO。

● pasv_address=。

此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址从输入的连接套接字(incoming connectd socket)中获取。

(3)ASCII模式。

默认情况下,Vsftpd禁止使用ASCII传输模式。即使FTP客户端使用asc命令指明要使用ASCII模式,但是Vsftpd表面上接受了asc命令,而在实际传输文件时还是使用二进制方式。下面的选项控制Vsftpd是否使用ASCII传输模式。

● ascii_upload_enable=YES|NO。

控制是否允许使用ASCII模式上传文件,YES为允许;NO为不允许(默认)。

● ascii_download_enable=YES|NO。

控制是否允许使用ASCII模式下载文件,YES为允许;NO为不允许(默认)。

2.性能与负载控制

(1)超时选项。

● idle_session_timeout=。

空闲(发呆)用户会话的超时时间,若超出这个时间还没有传送的数据或输入的指令,则会强迫断线。单位为秒,默认值为300秒。

● data_connection_timeout=。

空闲的数据连接的超时时间,默认值为300秒。

● accept_timeout=numerical value。

接受建立联机的超时设定,单位为秒,默认值为60秒。

● connect_timeout=numerical value。

响应PORT方式的数据联机的超时设定,单位为秒,默认值为60秒。

以上两个选项针对客户端的,将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接。

(2)负载控制。

● max_clients=numerical value。

此选项在Vsftpd使用单独(stand-alone)模式下有效,它定义了FTP服务器最大的并发连接数。当超过此连接数时,服务器拒绝客户端连接。默认值为0,表示不限制最大连接数。

● max_per_ip=numerical value。

此选项在Vsftpd使用单独(stand-alone)模式下有效,它定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将影响到诸如网际快车这类的多进程下载软件,默认值为0,表示不限制。

● anon_max_rate=value。

设定匿名用户的最大数据传输速度value,以Bytes/s为单位,默认为无。

● local_max_rate=value。

设定用户的最大数据传输速度value,以Bytes/s为单位,默认为无。此选项对所有的用户都有效。此外,也可以在用户个人配置文件中使用此选项,以指定特定用户可获得的最大数据传输速率。步骤如下。

● 在vsftpd.conf中指定用户个人配置文件所在的目录,如:

user_config_dir=/etc/vsftpd/userconf

● 生成/etc/vsftpd/userconf目录。

● 用户个人配置文件是在该目录下与特定用户同名的文件,如:

/etc/vsftpd/userconf/xiaowang

● 在用户的个人配置文件中设置local_max_rate参数,如:

local_max_rate=80000

以上步骤设定FTP用户xiaowang的最大数据传输速度为80 KB/s。

Vsftpd对于速度控制的变化范围在80%~120%之间,比如我们限制最高速度为100 KB/s,但实际的速度可能在80 KB/s~120 KB/s之间。当然,若是线路带宽不足时,速率自然会低于此限制。

3.用户选项

Vsftpd的用户分为3类,即匿名用户、本地用户(local user)及虚拟用户(guest)。

(1)匿名用户。

● anonymous_enable=YES|NO。

控制是否允许匿名用户登录,YES为允许(默认);NO为不允许。

● ftp_username=。

匿名用户所使用的系统用户名,默认此选项在配置文件中不出现,值为ftp。

● no_anon_password=YES|NO。

控制匿名用户登入时是否需要密码,YES为不需要;NO为需要(默认)。

● deny_email_enable=YES|NO。

默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的E-mail地址进行登录的匿名用户。即当匿名用户使用banned_email_file文件中所列出的E-mail登录时被拒绝,显然这对于阻击某些DoS攻击很有效。当此选项生效时,需追加banned_email_file选项。

● banned_email_file=/etc/vsftpd.banned_emails。

指定包含被拒绝的E-mail地址的文件,默认文件为/etc/vsftpd.banned_emails。

● anon_root=。

设定匿名用户的根目录,即匿名用户登录后被定位到此目录下。主配置文件中默认无此选项,默认值为/var/ftp/。

● anon_world_readable_only=YES|NO。

控制是否只允许匿名用户下载可阅读文档,为YES(默认),只允许匿名用户下载可阅读的文件;为NO,允许匿名用户浏览整个服务器的文件系统。

● anon_upload_enable=YES|NO。

控制是否允许匿名用户上传文件,YES为允许;NO(默认)为不允许。除了这个选项外,匿名用户要能上传文件,还需要两个条件,一是write_enable选项为YES;二是在文件系统中FTP匿名用户对某个目录有写权限。

● anon_mkdir_write_enable=YES|NO。

控制是否允许匿名用户创建新目录,YES为允许;NO(默认)为不允许。当然在文件系统中,FTP匿名用户必须对新目录的上层目录拥有写权限。

● anon_other_write_enable=YES|NO。

控制匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除及更名等。YES为拥有,NO(默认)为不拥有。

● chown_uploads=YES|NO。

控制是否修改匿名用户所上传文件的所有权为YES,匿名用户上传文件的所有权将改为另外一个不同的用户所有,用户由chown_username选项指定。此选项默认值为NO。

● chown_username=whoever。

该选项指定拥有匿名用户上传文件所有权的用户,选项与chown_uploads联用。不推荐使用root用户。

(2)本地用户。

在使用FTP服务的用户中,除了匿名用户外,还有一类在FTP服务器所属主机上拥有账号的用户。Vsftpd中称此类用户为“本地用户”(local users),等同于其他FTP服务器中的real用户。

● local_enable=YES|NO。

控制Vsftpd所在的系统的用户是否可以登录Vsftpd,默认值为YES。

● local_root=。

定义所有本地用户的根目录,当本地用户登入时将被更换到此目录下,默认值为无。

● user_config_dir=。

定义用户个人配置文件所在的目录,用户的个人配置文件为该目录下的同名文件,其格式与vsftpd.conf格式相同。例如,定义user_config_dir=/etc/vsftpd/ userconf,并且主机上有用户xiaowang和lisi,则可以在user_config_dir的目录新增名为xiaowang和lisi的两个文件。当用户lisi登入时,Vsftpd则会读取user_config_dir下lisi这个文件中的设定值,应用于用户lisi。默认值为无。

(3)虚拟用户。

● guest_enable=YES|NO。

若是启动这项功能,所有的非匿名登入者都视为guest,默认值为关闭。

● guest_username=。

定义Vsftpd的guest用户在系统中的用户名,默认值为ftp。

4.安全措施

(1)用户登录控制。

● pam_service_name=vsftpd。

该选项指定Vsftpd进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd。

● /etc/vsftpd.ftpusers。

Vsftpd禁止列在此文件中的用户登录FTP服务器,这个机制在/etc/pam.d/vsftpd中为默认设置。

● userlist_enable=YES|NO。

此选项被激活后,Vsftpd将读取userlist_file选项所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入口令之前被禁止。即该用户名输入后Vsftpd查到该用户名在列表中,则直接禁止该用户,不会再进行询问口令等后续步聚。默认值为NO。

● userlist_file=/etc/vsftpd.user_list。

该选项指出userlist_enable选项生效后被读取的包含用户列表的文件,默认值是/etc/vsftpd.user_list。

● userlist_deny=YES|NO。

该选项决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器,此选项在userlist_enable选项启动后才生效。为YES(默认值),禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示;为NO,只允许在文件中的用户登录FTP服务器。

● tcp_wrappers=YES|NO。

该选项在Vsftpd中使用tcp_wrappers远程访问控制机制,默认值为YES。

(2)目录访问控制。

● chroot_list_enable=YES|NO。

该选项锁定某些用户在自家目录中,即当这些用户登录后不可以转到系统的其他目录,只能在自己的目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出,默认值为NO。

● chroot_list_file=/etc/vsftpd/chroot_list。

该选项指出被锁定在自己目录中的用户的列表文件,文件格式为一行一个用户,通常该文件是/etc/vsftpd/ chroot_list。此选项默认为不设置。

● chroot_local_users=YES|NO。

该选项将本地用户锁定在自己的目录中。当此项被激活时,chroot_list_enable和chroot_local_users选项的作用将发生变化,chroot_list_file所指定文件中的用户将不被锁定在自身的目录中。本选项被激活后,可能带来安全上的冲突,特别是当用户拥有上传及shell访问等权限时。因此只有在确实了解的情况下,才可以打开此参数。默认值为NO。

● passwd_chroot_enable。

当此选项激活时,与chroot_local_user选项配合,chroot()容器的位置可以在每个用户的基础上指定。每个用户的容器来源于/etc/passwd中每个用户的自己的目录字段。默认值为NO。

(3)文件操作控制。

● hide_ids=YES|NO。

该选项设置是否隐藏文件的所有者和组信息。为YES,当用户使用“ls -al”之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp。默认值为NO。

● ls_recurse_enable=YES|NO。

该选项为YES,允许使用“ls -R”指令。这个选项有一个小的安全风险,因为在一个大型FTP站点的根目录下使用“ls -R”会消耗大量系统资源。默认值为NO。

● write_enable=YES|NO。

控制是否允许使用任何可以修改文件系统的FTP的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE和SITE。默认值为NO,不过自带的简单配置文件中打开了该选项。

● secure_chroot_dir=。

此选项指向一个空目录,并且ftp用户对此目录无写权限。当Vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中。默认目录为/usr/share/empty。

(4)新增文件权限控制。

● anon_umask=。

该选项设置匿名用户新增文件的umask数值,默认值为077。

● file_open_mode=。

该选项设置上传档案的权限,与chmod所使用的数值相同。如果希望上传的文件可以执行,设此值为0777。默认值为0666。

● local_umask=。

该选项设置本地用户新增档案时的umask数值,默认值为077。不过,其他大多数的FTP服务器都是使用022。如果用户希望的话,可以修改为022。在自带的配置文件中此项设置为022。

5.提示信息

(1)ftpd_banner=login banner string。

此选项定义login banner string(登录欢迎语字符串),用户可以自行修改。预设值为无,设置后将取代系统原来的欢迎词。

(2)banner_file=/directory/vsftpd_banner_file。

此选项指定一个文本文件,当使用者登录时会显示该文件的内容,通常为欢迎话语或是说明。默认值为无。与ftpd_banner相比,banner_file是文本文件的形式;而ftpd_banner是字符串的格式。banner_file选项将取代ftpd_banner选项。

(3)dirmessage_enable=YES|NO。

该选项控制是否启用目录提示信息功能,YES(默认)为启用;NO为不启用。启用此功能后,当用户进入某一个目录时,会检查该目录下是否有message_file选项所指定的文档。若有,则会显示其内容,通常这个文档会放置欢迎话语或是对该目录的说明。

(4)message_file=。

此选项仅在dirmessage_enable选项激活后方生效,默认值为.message。

6.日志设置

(1)xferlog_enable=YES|NO。

该选项控制是否启用一个日志文件,用于详细记录上传和下载,该日志文件由xferlog_file选项指定。默认值为NO,但简单配置文件中激活了此选项。

(2)xferlog_file=。

这个选项设定记录传输日志的文件名,默认值为/var/log/vsftpd.log。

(3)xferlog_std_format=YES|NO。

该选项控制日志文件是否使用xferlog的标准格式,如同Wu-ftpd一样。使用xferlog格式。可以重新使用已经存在的传输统计生成器,而默认的日志格式更有可读性。默认值为NO,但自带的配置文件中激活了此选项。

(4)log_ftp_protocol=YES|NO。

当此选项激活后,所有的FTP请求和响应都被记录到日志中。提供此选项时,xferlog_std_format不能被激活。这个选项有助于调试,默认值为NO。

7.其他设置

(1)setproctitle_enable=YES|NO。

为YES,Vsftpd将在系统进程列表中显示每个会话(session)的状态。即进程报告将显示每个Vsftpd会话在做什么(挂起和下载等),如用“ps -ef|grep ftp”。出于安全的目的,可以考虑将此选项关闭。为NO(默认),进程报告只显示一个Vsftpd进程在运行。

(2)text_userdb_names=YES|NO。

当使用者登入后使用“ls-al”之类的指令时,目录列表的用户和组信息域默认出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启,默认值为NO。

(3)user_localtime=YES|NO。

默认为NO;为YES,Vsftpd显示目录列表时使用本地时区的时间。默认显示GMT时间。同样,由FTP命令“MDTM”返回的时间值也受此选项影响。

(4)check_shell=YES|NO。

此选项仅对不使用PAM方式的Vsftpd生效。当此选项关闭后,本地用户登录时Vsftpd不会检查/etc/shells文件查找一个有效的用户shell。默认为YES。

(5)nopriv_user=。

该选项指定一个用户,当Vsftpd不想要权限时,使用此用户身份。此用户最好是一个专用的用户,而不是用户nobody。在大多数的机器上,nobody用户被用于大量重要的操作。默认值为nobody。

(6)pam_service_name=。

该选项指明Vsftpd使用PAM验证服务时的PAM配置文件名,默认值为ftp。

5.2.4 通过Web浏览器管理Vsftpd服务器

CP+是一套以GTK+发展起来帮助管理员在KDE和GNOME环境下通过Web方式进行设定的工具。通过CP+,管理员可以管理FTP账号、实时监控文件传输,还可以直接查看系统登录成功及失败的次数,提前了解是否有人正在对系统进行攻击。当然也可以启动或停止FTP服务器的服务,或直接修改设定文件,或决定系统重新启动的时间。几乎所有与FTP相关的功能都能使用CP+直接实现。

1.下载安装

执行如下命令:

#Wget http://cpplus.psoft.net/cgi-bin/get_cpplus.cgi

2.系统要求

中央处理器兼容Intel X86处理器PentiumII 400以上,64 MB(推荐128 MB)内存,150 MB以上硬盘空间,显示内存为4 MB。内核版本基于2.4或以上,GNOME 1.2以上。桌面分辨率至少为640 ×480,桌面颜色至少65000色(16位元)。

3.安装前的准备工作

安装过程中需要编译,因此需要GCC(2.96以上)和Qt(2.0以上)及GTK支持,所以要使用RPM来确认:

rpm -qa | grep gcc;rpm -qa | grep qt;rpm -qa | grep gtk

4.命令行下安装软件

执行如下命令:

gunzip cpplus-3.1.1.tar.gz
tar vxf cpplus-3.1.1.tar
cd cpplus
./setup.sh

安装过程需要回答一些问题,通常保留默认即可,如图5-2所示。

图5-2 CP+配置界面

5.运行软件

打开一个浏览器http://IP:100002,通过在线注册即可进入CP+的Vsftpd配置界面,如图5-3所示。

图5-3 CP+的Vsftpd配置界面

5.2.5 分析Vsftpd服务器的日志文件

可以使用AWStats分析Vsftpd日志:

wget http://awstats.sourceforge.net/files/awstats-6.2.tgz
tar zxvf awstats-6.2.tgz
mv awstats-6.2 /usr/local/awstats
cd /usr/local/awstats/tools

要统计Vsftpd日志,必须将其格式改为Wu-ftpd的日志格式。更改/etc/vsftpd.conf文件,在文件最后加入以下内容:

xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log

注意:如果有vsftpd_log_file=/XXX/XXX,则将其注释掉。

修改日志配置文件/etc/awstats/awstats.ftp.conf:

LogFile="/var/log/xferlog"
LogType=F
LogFormat="%time3 %other %host %bytesd %url %other %other %method %other %logname %oth er %code %other %other"
LogSeparator="\s"
SiteDomain="ftp.xxx.xxx "
HostAliases="192.165.1.100 localhost 127.0.0.1"
DNSLookup=1
DirData="/var/lib/awstats"
DirIcons="/awstatsicons"
AllowToUpdateStatsFromBrowser=0
NotPageList=""
LevelForBrowsersDetection=0
LevelForOSDetection=0
LevelForRefererAnalyze=0
LevelForRobotsDetection=0
LevelForWormsDetection=0
LevelForSearchEnginesDetection=0
ShowLinksOnUrl=0
ShowMenu=1
ShowMonthStats=UVHB
ShowDaysOfMonthStats=HB
ShowDaysOfWeekStats=HB
ShowHoursStats=HB
ShowDomainsStats=HB
ShowHostsStats=HBL
ShowAuthenticatedUsers=HBL
ShowRobotsStats=0
ShowEMailSenders=0
ShowEMailReceivers=0
ShowSessionsStats=1
ShowPagesStats=PBEX
ShowFileTypesStats=HB
ShowFileSizesStats=0
ShowBrowsersStats=0
ShowOSStats=0
ShowOriginStats=0
ShowKeyphrasesStats=0
ShowKeywordsStats=0
ShowMiscStats=0
ShowHTTPErrorsStats=0
ShowSMTPErrorsStats=0
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ftp -update
测试http://IP/awstats/awstats.pl?config=ftp
#定时更新
vi /etc/crontab
50 4 * * * root /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ftp-update  >/dev/null 2>&1

5.2.6 使用BlockHosts对抗暴力破解

Vsftpd服务器面临的另外一个威胁是黑客采取暴力破解的方式获取用户口令而非法登录FTP服务器,BlockHosts软件通过分析Vsftpd日志文件帮助tcp_wrappers实现工作自动化。例如,在30秒钟内一个IP地址(192.165.1.23)连续20次登录Vsftpd服务器,而且全部因为口令错误登录失败,那么这个IP地址无疑是非法或者恶意主机,这时BlockHosts会自动将该IP地址写入/etc/hosts.deny文件中。BlockHosts的官方网站为http://www.aczoom.com/cms/blockhosts/,最新版本为1.0.0。BlockHosts基于命令行模式,使用非常简单。

5.2.7 在RHEL 5.0下安装支持SSL的最新版本的Vsftpd

RHEL 5.0本身的Vsftpd已经支持SSL,只需设置如下行即可使用带SSL的Vsftpd。

(1)rpm -ivh vsftpd-2.0.1-5.i386.rpm。

(2)cd /usr/share/ssl/certs。

(3)openssl req -new -x509-nodes -out vsftpd.pem -keyout vsftpd.pem。

(4)vi /etc/vsftpd/vsftpd.conf。

==============================================
# 在最后添加以下内容
ssl_enable=YES
allow_anon_ssl=NO
rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem
==============================================

(5)service vsftpd start。

5.2.8 使用quota为ftpuser添加磁盘限额

使用quota为ftpuser添加磁盘限额,避免恶意用户用垃圾数据塞满硬盘。假设/var/ftp在根分区/(/dev/hda5)中,则将/etc/fstab中根分区的记录的第4个字段改为“defaults, usrquota”,类似如下:

LABEL=/ / ext3 defaults,usrquota 1 1

重启系统后输入下列命令:

quotacheck -acu检查启用了配额的文件系统,并为每个文件系统建立一个当前磁盘用量表
quotacheck -avu生成每个启用了配额的文件系统的当前磁盘用量表
edquota ftpuser为用户ftpuser设置磁盘配额

这时系统会在默认文本编辑器(vi)中打开配额文件,显示类似如下:

Disk quotas for user ftpuser (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hda5 0 0 0 0 0 0

第1列是启用配额文件系统的名称,第2列显示用户当前使用的块数,随后的两列用来设置用户在该文件系统上的软硬块限度。inodes列显示用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度。硬限度是用户或组群可以使用的磁盘空间的最大绝对值,达到该限度后,磁盘空间不能再被用户或组群使用;软限度定义了可被使用的最大磁盘空间量,和硬限度不同的是它可以在一段时期内被超过。这段时期被称为“过渡期”(grace period),过渡期可以用秒、分钟、小时、天数、周数或月数表示。如果以上值中的任何一个被设置为0,则其限度就不会被设置,按需要修改后存盘退出。要校验用户的配额是否被设置,使用以下命令。

quota testuser

然后使用edquota-t来设置过渡期(grace period),和另一个edquota命令相似,这个命令也会在文本编辑器中打开当前的文件系统的配额:

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hda5 7days 7days

按需要修改后存盘退出,这样成功地为ftpuser增加了磁盘配额。

5.2.9 配置Linux FTP服务器vsftpd以支持IPv6

首先,以root用户登录,然后打开vsftpd.conf,该文件通常位于/etc/vsftpd目录中。注释掉vsftpd.conf文件中的下面这一行:

listen=yes

将如下行添加到vsftpd.conf中以支持IPv6:

listen_ipv6=yes

使用service vsftpd restart命令重新启动vsftpd服务器。

5.3 使用客户端工具

以上已经安全加固了服务器端,要防范网络嗅探,即客户端向服务器传输数据过程的安全。防范网络嗅探的关键是文件传输过程,使用SSH上传数据到ProFTPD服务器可以加密所有传输的数据。这样即使网络中的黑客能够劫持用户所传输的数据,如果不能解密的话,也不能对数据传输构成真正的威胁。SSH有很多功能,它既可以代替Telnet,又可以为FTP和POP提供一个安全的“传输通道”。在不安全的网路通信环境中,它提供了很强的验证(authentication)机制与非常安全的通信环境。Linux下基于SSH的工具有命令行和图形界面(gFTP)两种。

5.3.1 命令行

命令行的主要工具是SFTP命令,该命令可以用来打开一次安全互动的FTP会话。它与FTP相似,只不过使用安全且加密的连接,其一般语法是sftp username@hostname.com。一旦通过验证即可使用一组和FTP相似的命令。SFTP相关命令及其说明如表5-3所示。

表5-3 SFTP相关命令及其说明

5.3.2 图形界面

gFTP是X Window下的一个用Gtk开发的多线程FTP客户端工具,它与Microsoft Windows下运行的CuteFTP等FTP工具极为类似,主要有以下一些特性。

(1)支持FTP、HTTP、HTTPS、SSL和SSH协议。

(2)支持FXP文件传输(在两个ftp server间传输文件)。

(3)允许多文件传输下载阵列。

(4)支持下载整个目录和文件。

(5)有书签选单让使用者可以快速选取远端。

(6)支持断点续传。

(7)支持远端目录快取。

(8)支持拖动文件。

(9)支持FTP和HTTP代理服务器。

(10)允许passive或是非passive文件传输。

(11)全目录下载。

(12)SSH连接和数据传输。

gFTP而程序实际执行时,屏幕分辨率必须调整至800像素×600像素(含)以上。用其可将经常到访的FTP站点添加书签,方便随时联机浏览,并提供书签管理功能将不同书签分类。此外gFTP还可以外挂编辑程序,以实现线上浏览或修改文件,并能修改文件的存取权限。支持的通信协议,包括FTP、FTPS、HTTP、HTTPS、SSH和FSP,并允许使用Proxy下载文件,系统要求gtk+1.2.3以上、X11R6以上及线程编程库。如果安装了基于libc6的系统(Debian 2.x或Red Hat 5.x以上),就已经有了线程库。gftp的官方网站为http://www.gftp.org/

Linux下安装gftp方法如下:

yum install gftp

默认安装的gftp发现有些远程站点的中文出现乱码,本身软件菜单没有修改字体之处,编辑/usr/bin/gftp文件。

在#!/bin/sh之后添加如下行:

export LANG=zh_CN

存盘退出。

用命令行方式在支持X的系统上启动gFTP,格式为:

gftp[--help][-h][--version][-v][[ftp://][user:pass@]ftpsite[:port][/directories]]

gFTP的工作界面如图5-4所示。

图5-4 gFTP的工作界面

整个窗口的布局分为5个部分,即菜单栏、工具栏、目录窗口、任务队列和日志栏。

1.使用菜单栏

(1)“FTP”菜单项。

第1栏:Window 1指目录窗口中左边的Window,Window 2指右边一个。前面的按钮按下表示选中,此时,工具按钮栏的操作是针对选中Window的。

第2栏:传输方式,按钮按下表示选中,ASCII是字符方式传输,Binary是二进制方式传输。

第3栏:选项,弹出的窗口如图5-5所示。

图5-5 “选项”窗口

其中的几个复选框说明如下。

● Start file transfers:传输任务进入队列之后立即开始执行。

● Show hiden files:显示属性为“隐藏”的文件。

● Allow Manual commands in GUI:GUI界面下可以使用的命令。

如果希望使用安全的SSH传输数据(使用sFTP,该协议是建立在SSH2基础上的服务,本身和FTP没有任何直接关系),则打开“SSH”选项卡。其中包括“使用SSH2 SFTP子系统”复选框,如图5-6所示。

图5-6 “使用SSH2 SFTP子系统”复选框

(2)“本地”菜单项。

该菜单项用于操作Window1,比较简单。单击该菜单项,显示的窗口如图5-7所示。需要注意的是“更改权限”选项有可能受到权限的限制不能正确执行。发送SITE命令的含义是用命令行方式向主机发送ftp命令。

图5-7 “本地”窗口

(3)“远程”菜单项。

该菜单项用于操作Window 2,内容与“本地”菜单项一致。

(4)“书签”菜单项。

与CuteFTP不同,gFTP用收藏夹的方式快速访问定制的站点。即使升级gFTP,收藏夹中的内容仍能够继续使用。编辑书签的窗口如图5-8所示。

图5-8 编辑书签的窗口

“新增书签”选项允许不必每次登录FTP时输入SSH服务器的IP位置、账号及口令。

(5)“传输”菜单项。

“传输”菜单项用于操作任务队列,包括开始传输任务及把任务从任务队列中删除等。在任务栏中增加一项下载任务(Window 2到Window 1)。其功能与目录窗口中的<-按钮相同。在任务栏中增加一项上传任务(Window 1到Window 2)的功能与目录窗口中的->按钮相同。如果目的窗口重要传输的文件(目录)名称已经存在,将弹出一个对话框,让用户选择“断点续传”、“覆盖”及“忽略”等操作方式。传输菜单如图5-9所示。

图5-9 传输(Transfers)菜单

(6)“日志”菜单项。

该菜单项用于查看、清除及保存日志信息,查看日志信息的界面如图5-10所示。

图5-10 查看日志信息的界面

(7)“工具”菜单项。

该菜单项用于对比Window 1和Window 2的内容,避免重复下载,方便用户使用。

(8)“Help”菜单项。

该菜单项包括About和License Agreement,主要用于查看软件版本。

2.使用工具栏

各种工具按钮的设置使连接操作速度加快,最左边的按钮用于执行与连接有关的操作,包括“快速连接”和“断开连接”按钮。当最右边的按钮呈明亮的红色时,表示当前执行的传输可以停止。其他下拉列表框包括“主机名”、“端口号”、“用户名”、“密码”和“传输协议”。SSH协议需要在本机安装sFTP Server(HTTP://WWW.XBILL.ORG/SFTP),通过为Window 1和Window 2分别指定不同的URL,该方式可实现两台FTP服务器之间的文件互操作。

3.操作目录窗口

目录窗口的内容与CuteFTP等软件的目录窗口极为类似,右击可实现本地和远程菜单中的操作。使用三键鼠标的第3键可以拖动文件;使用两键鼠标,在Three Button Emulation的情况下可以同时按下两键拖动文件。用Shift键或Ctrl键选择多个目录或文件。

4.查看与操作任务队列

用于显示并操作任务队列中任务的层次结构及其操作状态,右击可以实现文件传输中的功能。

5.日志栏

用于显示日志信息,右击可以实现“日志”菜单项中的功能。

6.安全建议

gFTP支持多种协议,为了更加安全,可以把SFTP协议作为默认协议。

5.3.3 使用Windows FTP客户端

步骤如下。

(1)下载安装FileZilla。

FTP软件下载地址为http://www.51pc.com.cn/download/FileZilla.exe下载后安装。

(2)打开FileZilla。

(3)单击“编辑”下拉菜单中的“设置”选项,如图5-11所示。

图5-11 “设置”选项

(4)打开“FileZilla选项”对话框,单击“连接”下的“防火墙设置”选项。清除“被动(PASV)模式”复选框,如图5-12所示。然后单击“确定”按钮,关闭程序再重新进入。

图5-12 清除“被动(PASV)模式”复选框

(5)登录FTP服务器。

分别输入FTP地址、FTP上传用户名及FTP密码,端口输入21。然后单击“快速连接”按钮,就可以登录到FTP服务器(如果提示错误为不能登录,请检查是否安装防火墙,有时需要关闭防火墙或者配置为可以访问FTP)

(6)上传下载文件。

在左边选择网页的文件路径,单击ftp目录。然后拖动要上传的文件和文件夹到右侧,自动上传到服务器空间,如图5-13所示。

图5-13 上传文件

下载服务器文件操作类似,只不过把右边的文件下载到左边而已。

5.4 vsftpd服务器故障排除

5.4.1 日志文件

日志文件对于故障排除非常重要,vsftpd中与log有关的选项有vsftpd_log_file、xferlog_enable、xferlog_std_format、xferlog_file、dual_log_enable、syslog_enable、log_ftp_protocol和no_log_lock。

vsftp中关于日志记录的参数如下:

xferlog_enable=yes/no          //是否启用xferlog日志格式
xferlog_std_format=yes/no    //是否采用标准格式记录日志
xferlog_file=/path/to/logfile    //xferlog日志文件所在位置,默认为/var/log/xferlog

上面的参数设置记录xferlog日志的格式,这是早期Wu-ftpd服务的日志格式,它会记录上传和下载操作。vsftpd也有专有的日志格式,用下列参数设置:

dual_log_enable=yes/no       //是否采用Vsftpd自己的日志记录方式
log_ftp_protocol=yes/no    //是否记录所有的ftp命令日志vsftpd_log_file=/path/to/logfile//指定vsftpd日志文件位置,默认为/var/log/vsftpd.log

xferlog_enable的默认值为no(vsftpd提供的配置文件模版将其值改为yes),dual_log_enable的默认值也为no。即默认情况下vsftpd不记录日志。也可以将日志信息写入系统日志/var/log/messages中,使用如下参数:

syslog_enable=yes/no

下面是一个xferlog日志文件的内容:

Thu Mar 4 08:12:302008 1202.114.40.242 37 /incoming/index.html a _ o a guest@my.net ftp 0 * c

第1行中的数据及其说明如表5-4所示。

表5-4 第1行中的数据及其说明

5.4.2 vsftp常见故障排除

vsftp常见故障排除如下。

(1)日志文件文件出现错误信息“500 OOPS:vsftpd: not found: directory given in 'secure_chroot_dir':/usr/share/empty”。

在vsftpd.conf中添加如下一行:

secure_chroot_dir=/opt/usr/share/empty

建立一个目录:

mkdir /opt/usr/share/empty

然后关闭匿名登录,把vsftpd.conf中的anonymous_enable=YES修改为:

anonymous_enable=NO

(2)如何配置vsftpd来chroot虚拟用户?

当尝试在vsftpd下chroot虚拟用户时,在vsftpd.conf中输入如下内容:

guest_enable=yes
#virtual users are mapped to user ftp which owns all dirs
guest_username=ftp
#chroots the virtual user to his directory (user joe has directory joe)
chroot_local_user=YES
user_sub_token=$USER

关键是确保在/etc/passwd的ftp用户的主目录中包含在/var/ftp/$USER中的字符串$USER守护进程会做一个简单的字符串匹配比较决定在何处替换用户的名字。

(3)vsftp中如何限制用户只能在自己的home目录下?

有时不想让FTP用户访问其自己home目录之外的其他文件,则vsftp守护进程可以通过Chroot配置这个策略。编辑/etc/vsftpd/vsftpd.conf文件,添加一行:

chroot_local_user=YES

保存之后,重启vsftpd服务:

service vsftpd restart

重启服务之后,FTP所有用户都将受限制,只能访问自己home目录中的文件。

(4)如何修改vsftpd的默认根目录/var/ftp/pub到另一个目录?

修改ftp的根目录只要修改/etc/vsftpd/vsftpd.conf文件即可,在其中加入如下两行:

local_root=/var/www/html
chroot_local_user=YES

重新启动服务:

service vsftpd restart

任何一个用户FTP登录到这个服务器上都会chroot到/var/www/html目录下。

5.5 本章小结

在众多网络应用中,FTP(文件传输协议)有着非常重要的地位。Internet中的一个十分重要的资源就是软件资源,而各种各样的软件资源大多放在FTP服务器中。与大多数Internet服务一样,FTP也是一个客户端/服务器系统。本章介绍了FTP的工作原理,快速构建Vsftpd服务器的方法,使用FTP客户端工具的方法,vsftp常见故障排除。