第5章 FTP 服务与应用 5.基础知识 1 5.1.1 FTP 概述 FTP 是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。 FTP 作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP 的目标是提 高文件的共享性和可靠、高效地传送数据。 在FTP 的使用中,经常遇到文件的下载和上传。用户可通过客户端程序向(从)远程主 机上传(下载)文件。 在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器 收到命令后给予响应,并执行命令。FTP 与操作系统无关,任何操作系统上的程序只要符合 FTP,就可以相互传输数据。 5.1.2 FTP 服务器 简单地说,支持FTP 的服务器就是FTP 服务器。 与大多数Internet服务一样,FTP 也是一个客户机/服务器系统。用户通过一个支持 FTP 的客户机程序,连接到在远程主机上的FTP 服务器程序。用户通过客户机程序向服务 网络应用运维教程 器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。例 如,用户发出一条命令,要求服务器向用户传送某一个文件的一份副本,服务器会响应这条 命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用 户目录中。 5.1.3 匿名FTP 使用FTP 时必须首先登录系统,在远程主机上获得相应的权限以后,方可下载或上传 文件。也就是说,要想与某台计算机传送文件,就必须具有那台计算机的适当授权。换句话 说,除非有用户ID 和口令,否则便无法传送文件。这种情况违背了Internet的开放性, Internet上的FTP 主机何止千万台,不可能要求每个用户在每台主机上都拥有账号。匿名 FTP 就是为解决这个问题而产生的。 匿名FTP 是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无须 成为其注册用户。系统管理员建立了一个特殊的用户ID,名为Anonymous,Internet上的 任何人在任何地方都可使用该用户ID 。 通过FTP 程序连接匿名FTP 主机的方式与连接普通FTP 主机的方式差不多,只是在 要求提供用户标识(时必须输入Annu该用户ID 的口令可以是任意字符串。习 ID) oymos, 惯上,用自己的E-mail地址作为口令,使系统维护程序能够记录下来谁在存取这些文件。 值得注意的是,匿名FTP 并不适用于所有的Internet主机,它只适用于那些提供了这 项服务的主机。 当远程主机提供匿名FTP 服务时,会指定某些目录向公众开放,允许匿名存取。系统 中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP 主机都允许用户从其 下载文件,而不允许用户向其上传文件。也就是说,用户可将匿名FTP 主机上的所有文件 全部复制到自己的机器上,但不能将自己机器上的任何一个文件复制至匿名FTP 主机上。 即使有些匿名FTP 主机确实允许用户上传文件,用户也只能将文件上传至某一个指定的上 传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录 中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的 文件,如带病毒的文件。 5.1.4 用户分类 1.Ral账户这类用(e) 户在FTP 服务上拥有账号。当这类用户登录FTP 服务器时,其默认的主目录 就是其账号命名的目录。但是,其还可以变更到其他目录中去,如系统的主目录等。 94 第5 章 FTP 服务与应用 95 2.Guest用户 在FTP服务器中,人们往往会给不同的部门或者某个特定的用户设置一个账户。但 是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP 服务器上其他文件的安全。这类账户称为Guest用户。拥有这类账户的用户,只能访问其 主目录下的目录,而不得访问主目录以外的文件。 3.Anonymous用户 这也是人们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定账户,但是 其仍然可以匿名身份访问某些公开的资源。 在部署FTP服务器时,人们需要根据用户的类型对用户进行归类。默认情况下,一些 FTP服务器会把建立的所有账户都归属为Real用户。但是,这往往不符合安全需要。因为 这类用户不仅可以访问自己的主目录,而且还可以访问其他用户的目录,给其他用户所在的 空间带来一定的安全隐患。所以,要根据实际情况修改用户所在的类别。 5.1.5 使用方式 在TCP/IP中,传输FTP标准命令的TCP端口号为21,Port方式传输数据的端口为 20。FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制。 需要进行远程文件传输的计算机必须安装和运行FTP客户程序。在Windows操作系 统的安装过程中,通常都安装了TPC/IP软件,其中就包含了FTP客户程序。但是,该程序 是字符界面而不是图形界面,这就必须以命令提示符的方式进行操作,很不方便。 启动FTP客户程序工作的另一途径是使用浏览器,用户只需要在地址栏中输入如下格 式的URL地址。 ftp://[用户名:口令@]ftp 服务器域名[:端口号] 在CMD命令行下,也可以用上述方法连接,通过PUT命令和GET命令达到上传和下 载的目的,通过LS命令列出目录,除了上述方法外还可以在CMD 命令下输入ftp后按 Enter键,然后输入openIP来建立一个连接,此方法也适用于Linux下连接FTP服务器。 通过浏览器启动FTP的方法虽然可以使用,但是速度较慢,还会将密码暴露在浏览器 中造成不安全。因此,一般都安装并运行专门的FTP客户程序,具体安装步骤如下。 (1)在本地计算机上连接Internet。 (2)搜索有文件共享主机或者个人计算机(一般在专门的FTP服务器网站上公布,上面 有进入该主机或个人计算机的名称、口令和路径)。 (3)当与远程主机或者对方的个人计算机建立连接后,用对方提供的用户名和口令登 录到该主机或对方的个人计算机。 网络应用运维教程 (4)在远程主机或对方的个人计算机登录成功后,就可以上传想跟别人分享的东西或 者下载别人授权共享的东西(这里的东西是指能放到计算机里去又能在显示屏上看到的 内容)。 (5)完成工作后关闭FTP 下载软件,切断连接。 5. 2 FTP 相比其他协议(如HTTP),FTP 要复杂一些。与一般的客户机/服务器(C/S)应用不同 点在于一般的C/S应用程序一般只会建立一个Socket(套接字)连接,这个连接同时处理服 务器端和客户端的连接命令和数据传输。而在FTP 中,命令与数据分开在两个连接中 传送。 5.2.1 FTP 端口 FTP 使用两个服务端口,即一个数据端口和一个命令端口(也称为控制端口)。控制连 接使用控制端口,用于传送命令,一般是21;数据连接使用数据端口,用于传送数据,一般是 20 。每一个FTP 命令发送之后,FTP 服务器都会返回一个字符串,包括一个响应代码和一 些说明信息。其中,响应代码主要是用于判断命令是否被成功执行了。 1. 命令端口 一般来说,客户端有一个Socket用来连接FTP 服务器的控制端口,它负责FTP 命令的 发送和接收返回的响应信息。一些操作,如“登录”“改变目录”“删除文件”,依靠这个连接发 送命令就可以完成。 2. 数据端口 对于有数据传输的操作,如显示目录列表以及上传、下载文件等,需要依靠另一个 Socket来完成。 如果使用被动模式,通常服务器端会返回一个数据端口号。客户端需要新建一个 Socket来连接这个端口,数据会通过这个新打开的数据端口传输。 如果使用主动模式,通常客户端会发送一个数据端口号给服务器端,并在这个端口监 听。服务器需要使用数据端口(如20)连接客户端的数据端口,建立数据连接,并进行数据 传输。 5.2.2 传输方式 FTP 的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位 96 第 5 章 FTP 服务与应用 置、连接的方式甚至与是否使用相同的操作系统无关。假设两台计算机通过FTP对话,人 们可以用FTP命令来传输文件。不同操作系统其使用上可能存在一些细微差别,但是协议 基本的命令结构是相同的。 FTP的传输有两种方式:ASCI 传输方式和二进制传输方式。 1.ASCII传输方式 假定用户正在复制的文件包含的是简单ASCI 码文本,如果在远程机器上运行的是不 同的操作系统,当文件传输时FTP通常会自动地调整文件的内容,以便把文件解释成对端 计算机存储文本文件的格式。 但是,常常有这样的情况,用户正在传输的文件包含的不是文本,它们可能是程序、数据 库、Ofice文档或者压缩文件。此时,在复制任何非文本文件之前,需要用BINARY命令告 诉FTP逐字复制,不要对文件进行格式转换。 2.二进制传输方式 在二进制传输中,保存文件的位序,以便原始和复制的内容是逐位一一对应的。例如, MacOS以二进制方式传送可执行文件到Windows系统,在对方系统上此文件不能执行。 如果在ASCI 方式下传输二进制文件,即使不需要也仍会转换,这将导致数据损坏。 ASCI 方式一般假设每一字符的第一有效位无意义,因为ASCI 字符不使用它。如果传输 二进制文件,那么所有的位都是重要的。 3.ASCII传输方式和二进制传输方式的区别 ASCI 传输方式和二进制传输方式的区别是回车换行的处理。二进制传输方式不对数 据进行任何处理;而ASCI 传输方式将回车换行转换为本机的回车字符,例如,UNIX下是 \n,Windows下是\r\n,MacOS下是\r。 5.2.3 工作模式 下面简单地介绍FTP的主动模式PORT和被动模式PASV 。 1.FTP的主动模式PORT 在FTP的主动模式下,客户端随机打开一个大于1024的端口N向服务器的命令端口 P(即21号端口)发起连接,同时开放N+1端口监听,并向服务器发出PORTN+1命令,由 服务器从它自己的数据端口(20)主动连接到客户端指定的数据端口(N+1 )。 FTP的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对 于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。 2.FTP的被动模式PASV 为了解决服务器发起到客户的连接问题,有了另一种FTP连接方式,即FTP的被动模 97 网络应用运维教程 式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的 连接被防火墙过滤的问题。 在FTP的被动模式下,当开启一个FTP连接时,客户端打开两个任意的本地端口(N> 1024和N+1 )。 第一个端口连接服务器的21号端口,提交PASV命令。然后,服务器会开启一个任意 的端口(P>1024),返回如227enteringpasivemode(127,0,0,1,4,18 )。它返回了227开 头的信息,在括号中有以逗号隔开的6个数字,前4个数字指服务器的地址;对于最后两个 数字,先将倒数第二个数字乘以256再加上最后一个数字就是FTP服务器开放的、用来进 行数据传输的端口。例如,得到227enteringpasivemode(h1,h2,h3,h4,p1,p2),那么数 据端口号是p1×256+p2,IP地址为h1.h4 。这意味着在服务器上有一个端口被开 h2. h3. 放。客户端收到命令取得端口号之后,会通过N+1号端口连接服务器的端口P,然后在两 个端口之间进行数据传输。 5.2.4 常用的FTP 命令 FTP每条命令都由3~4个字母组成,命令后面跟参数,用空格分开。每条命令都以\r\(“) n”结束。 要下载或上传一个文件,首先要登录FTP服务器,然后发送命令,最后退出。在这个过 程中,主要用到的命令有USER 、PASS 、SIZE 、CWD 、PASV 、PORT 、RETR 、STOR 、REST 、 QUIT 。 (1)USER:指定用户名。通常是控制连接后第一个发出的命令。例如,“USERqxf\r\ n,(”) 以用户名qxf登录。 (2)PASS:指定用户密码。该命令紧跟USER命令后。例如,“PASSqxf123\r\n”,密 码为qxf123 。 (3)SIZE:从服务器上返回指定文件的大小。例如,“SIZEfl.x\\,(”) 如果fl.x iettrniett 文件存在,则返回该文件的大小。 (4)CWD:改变工作目录。例如,“CWDdirname\r\n”。 (5)PASV:让服务器在数据端口监听,进入被动模式。例如,“PASV\r\n”。 (6)PORT:告诉FTP服务器客户端监听的端口号,让FTP服务器采用主动模式连接 客户端。例如,“PORTh1,h2,h3,h4,p1,p2”。 (7)RETR:下载文件。例如,RETRfl.xrn, iett。 “iett\\”下载文件fl. x (8)STOR:上传文件。例如,“l.\,(”) 上传文件fiett 。 STORfietxtr\nl.x(9)REST:该命令并不传送文件,而是略过指定点后的数据。此命令后应该跟其他要 求文件传输的FTP命令。例如,“REST100\r\n,(”) 重新指定文件传送的偏移量为100B 。 98 第 5 章 FTP 服务与应用 (10)QUIT:关闭与服务器的连接。 5.2.5 FTP 响应码 客户端发送FTP 命令后,服务器返回响应码。 响应码用3位数字编码表示。 (1)最高位数字给出了命令状态的一般性指示,如响应成功、失败或不完整。 (2)中间位数字是响应类型的分类,如2代表跟连接有关的响应,3代表用户认证。 (3)最低位数字提供了更加详细的信息。 响应码中最高位的数字的含义:1表示服务器正确接收信息,还未处理;2表示服务器 已经正确处理信息;3表示服务器正确接收信息,正在处理;4表示信息暂时错误;5表示信 息永久错误。响应码第二位数字的含义:0表示语法;1表示系统状态和信息;2表示连接状 态;3表示与用户认证有关的信息;4表示未定义;5表示与文件系统有关的信息。 常见的FTP 响应码及描述见表5-1。 表5- 1 常见的FTP 响应码 响应码描述 110 重新启动标记应答。在这种情况下文本是确定的,它必须是:MARKyyyy= mmmm,其中yyyy 是用户进程数据流标记,mmmm 是服务器标记 120 服务在nnn分钟内准备好 125 数据连接已打开,准备传送 150 文件状态良好,打开数据连接 200 命令成功 202 命令未实现 211 系统状态或系统帮助响应 212 目录状态 213 文件状态 214 帮助信息,信息仅对人类用户有用 215 名字系统类型 220 对新用户服务准备好 221 服务关闭控制连接,可以退出登录 225 数据连接打开,无正在进行的传输 226 关闭数据连接,请求的文件操作成功 227 进入被动模式 99 网络应用运维教程 续表 响应码描述 230 用户登录 250 请求的文件操作完成 257 创建PATHNAME 331 用户名正确,需要口令 332 登录时需要账户信息 350 请求的文件操作需要进一步命令 421 不能提供服务,关闭控制连接 425 不能打开数据连接 426 关闭连接,终止传输 450 请求的文件操作未执行 451 终止请求的操作:有本地错误 452 未执行请求的操作:系统存储空间不足 500 格式错误,命令不可识别 501 参数语法错误 502 命令未实现 503 命令顺序错误 504 此参数下的命令功能未实现 530 未登录 532 存储文件需要账户信息 550 未执行请求的操作 551 请求操作终止:页类型未知 552 请求的文件操作终止:存储分配溢出 553 未执行请求的操作:文件名不合法 3 FTP 分析 5. 下面通过一个例子来了解FTP 在FTP 客户端和服务器之间的交互过程。 5.3.1 建立连接 当客户端和服务器建立连接后,服务器会返回220 的响应码和一些欢迎信息,如图5-1 100 第 5 章 FTP 服务与应用 所示。 图5- 1 FTP 建立连接 5.3.2 客户端登录 当客户端发送用户名和密码,服务器验证通过后,会返回230 的响应码。然后,客户端 就可以向服务器发送FTP 命令了,如图5-2所示。 图5- 2 FTP 客户端登录 5.3.3 进入被动模式 当客户端在下载和上传文件前,要先发送命令让服务器进入被动模式。服务器会打开 101 网络应用运维教程 数据端口并监听,同时返回响应码227 和数据连接端口,如图5-3所示。 图5- 3 进入被动模式 5.3.4 被动模式下载文件 当客户端发送命令下载文件后,服务器会返回响应码150,并向数据连接发送文件内容, 如图5-4所示。 图5- 4 被动模式下载文件 102