200第十二章FTP服务器配置文件传输协议(FileTransferProtocol,FTP),顾名思义,是在文件传输时使用的通信协议,它出现在TCP/IP网络和Internet上的时间很早,在HTTP尚未广为流行前,FTP便是网络传输不可或缺的工具。12.1FTP特色虽然目前的部分功能,但它至今仍具有独树一帜的特色。◆交互式访问FTP允许用户和服务器之间,利用交互的方式来访问服务器资源,例如用户可要求FTP服务器列出某一目录中的文件列表,或是使用二进制文件的模式进行传输。◆指定下载的文件格式FTP允许客户端指定文件保存的格式,例如用户在访问FTP服务器的数据时可以指定包含文本文件或二进制文件,同时也可以指定使用ASCII或EBCDIC的文本文件格式。ftpbinary#以二进制模式进行传输200SwitchingtoBinarymode.◆稳定的传输机制FTP与其他通信协议最大的不同是,它使用两个连接端口来和客户端连接:TCP20和TCP21,其中连接端口TCP20用来传递数据,而TCP21则负责传输过程的控制,这种设计可以支持多个客户端同时连接FTP服务器,并具有稳定的优点。◆身份验证控制在用户访问服务器资源前,FTP服务器会要求用户输入账户名称及口令以验证身份。如果允许匿名访问,则用户只管输入“anonymous”为账户名称,而口令将不进行验证。Name(ftp.fc5linux.com:jack):jack201#输入用户账号名称331Pleasespecifythepassword.Password:#输入用户账号口令30Loginsuccessful.◆提供跨平台的数据交换FTP允许在不同的网络架构或操作系统间传递文件,例如Linux和Windows操作系统之间,因此是极好的跨平台解决方案。12.2服务器与客户端数据交换FTP使用TCP为传输时的通信协议,因此它可提供可信度较高的面向连接的传输,FTP服务器和客户端计算机数据交换的过程如下,图5-2给出了服务器和客户端数据交换过程。1)FTP客户端使用“三次握手”的方式,来与FTP服务器建立TCP会话。2)FTP服务器利用TCP21连接端口传送和接收FTP控制信息,它主要是用来监听客户端的连接请求,在建立连接后,这个连接端口将在会话进行时全程打开。3)FTP服务器另外使用TCP20连接端口传送和接收文件(可能是ASCII或二进制文件),但它会在文件传输后立即关闭。4)FTP客户端在向FTP服务器提出连接请求时会动态指定一个连接端口号,通常这些客户端指定的连接端口号由1024到65535,因为0到1023已由IANA(InternetAssignedNumbersAuthority)预先指定给通信协议或其他的服务使用。5)在FTP会话建立后,客户端会打开一个连接端口以连接到服务器上的TCP21连接端口。6)当文件开始传输时,客户端会打开另一个连接端口以连接到服务器上的TCP20连接端口,而且每一次文件传输时,客户端都会打开另一个新的连接端口传送文件。12.3FTP架构FTP是一种客户/服务器架构的通信协议,因此在两台主机间传递文件时,其中一台必须执行FTP服务器软件,例如VSFTP,而另一台则需要执行FTP客户端程序,例如IE6.0或是ftp命令。一般在文件传递时包含两种形式:202◆下载:文件由FTP服务器传送到客户端。◆上传:文件由客户端传送到FTP服务器。12.4VSFTP服务器安装在RHEL5中,内置的FTP服务器软件为VSFTP,它是VerySecureFTP(非常安全的FTP)的缩写,表示它强调的是其安全性控制,可以在操作系统安装时选择安装VSFTP。由于在默认的情形下,RHEL5并不会安装VSFTP服务器软件包(vsftpd),因此必须来查找名为“vsftpd”的服务器软件包,使用命令如下。[root@ns1~]#rpm–qa|grepvsftpd在安装VSFTP服务器后,最简单的启动方法如下:[root@ns1~]#/etc/rc.d/init.d/vsftpdstart正在启动vsftpd中的vsftpd:确定]如果要停止VSFTP服务器,可以使用以下的命令:[root@ns1~]#/etc/rc.d/init.d/vsftpdstop正在关闭vsftpd:确定]可以利用以下的方法来重新启动VSFTP服务器:[root@ns1~]#/etc/rc.d/init.d/vsftpdrestart正在关闭vsftpd:确定]正在启动vsftpd中的vsftpd:确定]因为FTP服务是服务器相当重要的工作,所以一般应该在引导时自动启动,以节省每次手动启动的时间,并且避免因为忘记启动而导致的服务器停止服务。要在引导时自动启动VSFTP服务器,可以使用以下的chkconfig命令:[root@ns1~]#chkconfig--level5vsftpdon[root@ns1~]#chkconfig--list|grepvsftpdvsftpd0:关闭1:关闭2:关闭3:关闭4:关闭5:打开6:关闭203以上命令表示如果系统执行RunLevel5时,就会自动启动VSFTP服务器(vsftpd),也可以配合--list参数来显示每个运行级别是否自动执行VSFTP服务器。12.5测试VSFTP服务器在完成以上安装、启动及设置步骤后,可以通过telnet命令登录到VSFTP服务器上的21连接端口,以测试VSFTP服务器是否正确启动,以下是一个简单的示例:[root@ns1root]#telnetftp.fc5linux.com21Trying192.168.0.1...Connectedtons1.fc5linux.com(192.168.0.1).Escapecharacteris'^]'.220(vsFTPd1.2.1)^]telnetq在成功安装及启动VSFTP服务器后,客户端可以通过许多工具进行服务器的连接,所以在本小节中,我们将介绍3种最常使用的工具:ftp命令、浏览器以及FTP应用程序。这些工具的使用方法虽然不同,但是都可达到文件传输的功能,建议读者应该熟悉最适合自己的工具,以便日常工作的需要。12.6FTP命令通常大部分的网络操作系统,例如Linux或Windows系统,都支持FTP命令的使用,它最大的好处是—不需要额外安装任何软件,所有的FTP命令都由操作系统直接支持。虽然FTP命令不如使用浏览器或FTP应用程序等图形化工具一样容易上手,但是它可通过交互式的访问方法来和FTP服务器通信,例如请求FTP服务器列出某一目录中的文件列表,或是使用二进制文件进行传输,因此仍不失为一种极好的FTP工具。首先打开终端窗口,并且输入以下格式的命令:204ftp服务器名称或IP地址在连接到VSFTP服务器后,输入账户名称和口令后即可登录服务器(也可以使用匿名访问),以下是连接后的内容:[jack@ns1~]$ftpftp.fc5linux.com#输入服务器地址Connectedtoftp.fc5linux.com.220(vsFTPd2.0.4)#服务器版本530PleaseloginwithUSERandPASS.530PleaseloginwithUSERandPASS.KERBEROS_V4rejectedasanauthenticationtypeName(ftp.fc5linux.com:jack):jack#输入用户账号名称331Pleasespecifythepassword.Password:#输入用户账号口令230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp#成功登录VSFTP服务器除了直接使用ftp命令之外,也配合open命令来连接FTP服务器,以下是连接的示例内容:[jack@ns1~]$ftpftpopen(to)ftp.fc5linux.comConnectedtoftp.fc5linux.com.…………205在成功登录VSFTP服务器后,可以在ftp提示符号下输入“?”,以列出所有可用的命令,如果仅要查询某一命令的说明,则在“?”后直接加上命令名称即可。ftp?#列出所有可用命令Commandsmaybeabbreviated.Commandsare:!crmdirproxysend$deletemgetsendportsiteaccountdebugmkdirputsizeappenddirmlspwdstatus………ftp◆get#查看一个命令说明getreceivefile以上是所有ftp支持的命令,有些和Windows或MS-DOS操作系统上的命令用法相同,如果有兴趣可以逐一查询它们的用法,本书在此仅整理较为常用的ftp命令,以供读者参考。◆?:显示命令名称及说明。◆!:表示执行本机命令,例如dir是显示ftp服务器上的目录内容,但是!dir则会显示客户端计算机的目录内容。◆ascii:以ASCII模式进行传输,一般用来传送纯文本文件。◆binary:以二进制模式进行文件传输,一般用来传送非纯文本文件。◆bye:结束ftp传输模式。◆cd:切换ftp服务器上的目录。◆close:关闭ftp服务器。◆debug:修改为调试模式。206◆delete:删除远程主机上的文件。◆dir:显示目录中的文件及子目录列表。◆get:下载一个文件。◆hash:以“#”符号表示目前文件传送的进度。◆lcd:切换到ftp客户端计算机上的目录。◆ls:显示目录中的文件及子目录列表。◆mdelete:删除多个远程主机上的文件。◆mget:下载多个文件。◆mkdir:添加子目录。◆mput:上传多个文件。◆open:打开ftp服务器。◆prompt:文件传输前出现提示字符串。◆put:上传一个文件。◆pwd:显示目前目录名称。◆quit:离开FTP服务器。◆rmdir:删除子目录。◆rename:将文件重新命名。◆rmdir:删除远程主机上的目录。◆status:显示目前的状态信息。◆type:设置文件传输模式。◆user:传送用户账户信息。综合以上的命令,在此提供一个示例,其中包含许多常用命令,读者不妨多加练习,以增加命令的熟练度。ftpls-al#显示目录中的所有文件及子目录列表227EnteringPassiveMode(192,168,0,118,83,73)150Herecomesthedirectorylisting.drwx------165005004096Mar2400:35.drwxr-xr-x3004096Mar2214:31..207-rw-------15005000Mar2307:33.ICEauthority…………226DirectorysendOK.ftppwd#显示目前目录名称257“/home/jack”ftpascii#以ASCII模式进行传输200SwitchingtoASCIImode.ftp!mkdirpublic#添加客户端子目录ftplcdpublic#切换到客户端上的目录Localdirectorynow/home/jack/publicftpget5-4.tif227EnteringPassiveMode(192,168,0,118,83,73)150OpeningBINARYmodedataconnectionfor5-4.tif(68334bytes).WARNING!397barelinefeedsreceivedinASCIImodeFilemaynothavetransferredcorrectly.226FilesendOK.68334bytesreceivedin0.024seconds(2.8e+03Kbytes/s)ftpbinary#以二进制模式进行传输200SwitchingtoBinarymode.ftpbye#