郭 杰
(西安航空學院計算機學院,西安,710077)
FTP采用C/S(Client端/服務器)模型,它是基于TCP協議連接其Client端和Server端,UDP協議是一個無連接的協議,故FTP協議不能基于UDP協議。FTP協議是建立在TCP協議基礎上,所以必須經過三次握手來完成Client端和Server端的數據和命令交互。FTP協議在TCP/IP協議模型中位于頂層,即應用層。但是它區別于大多數的應用層協議的是,FTP協議要在通信雙方之間建立了兩條通信鏈路:控制鏈路和數據鏈路。其各自的功能是:用戶發送的FTP命令和FTP服務器的響應,由控制鏈路來完成傳送會話過程中信息傳遞;而數據的傳輸則由數據鏈路來負責,數據鏈路在需要數據傳輸時建立,數據傳輸完畢即關閉數據鏈路。并且信息傳遞過程中使用的端口,每次進行連接時也不一定相同。而且,數據連接可由Client端發起的,也可能是Server端發起的。 Vsftpd是一種GPL(General Public License)許可下開放源代碼的基于UNIX/Linux操作系統下的FTP服務器。它是一種安全、快速、穩定的FTP服務器,Vsftpd能夠高效地處理大量的并發連接。在數據連接的建立方式中,PORT(主動)模式和PASV(被動)模式是FTP服務的數據傳輸中的兩種基本模式。這兩種模式發起數據連接的方向截然相反,PORT(主動)模式是從Server端向Client發起數據連接;與之相反的,PASV(被動)模式是Client端向Server端發起數據連接。兩種模式有各自的適用范圍。
大多數的Linux發型版本都內置了Vsftpd服務程序。隨著計算機技術的發展,小型化并且開源的基于嵌入式的操作系統正在被被廣泛使用,例如:基于Linux內核的OpenWrt系統由于其最小僅有3.5MB因而被廣泛移植到嵌入式芯片支持的路由系統中。同樣的Vsftpd服務程序也是開源的,用戶可以在指定網站上下載需要的Vsftpd RPM安裝包。在基于Linux系統下,通過對Vsftpd服務器的配置,可滿足在廣域網和局域網中對文件的傳輸需求。Vsftpd的主要特點包括:(1)提供安全的體系結構,根據任務的最低特權需求單獨執行每個任務。(2)支持虛擬IP配置,可以在提供一個IP地址的情況下,在域中使用該地址建立的多個FTP服務器。(3)允許配置并使用虛擬用戶,從而與系統用戶賬戶分離。(4)支持TCP封裝。(5)允許配置匿名服務器,用戶可以在不需要身份驗證的情況下上傳和下載文件。(6)性能穩定,可以處理大量并發連接。(7)可以配置為獨立的服務。(8)Vsftpd服務器支持寬帶控制。在有些情況下,系統可能自帶Vsftpd服務,通過執行"ntsysv"命令,在系統啟動時Vsftpd服務將會自動加載。找到其中的"vsftpd"服務,在其前面選擇"*"號,并選擇【確定】按鈕即可,如圖1所示。

圖1 設置自動運行Vsftpd服務
此外,還有一種方法也可完成配置。依次選擇【系統】|【管理】|【服務器設置】|【服務】命令,系統將打開【服務配置】窗口,在窗口中找到【vsftpd】選項,就可以對Vsftpd執行啟動、停止和重啟等操作。選中【vsftpd】選項前面的復選框,則可以在每次啟動系統時自動運行Vsftpd服務。
同樣的,用戶可以通過修改主配置文件vsftpd.conf來完成Vsftpd服務器的主要配置工作。需要注意的是,一旦用戶更改vsftpd.conf文件后,要使設置生效必須重新啟動配置后的Vsftpd服務。Vsftpd的主要配置文件位于Linux操作系統的/etc/目錄下。其中重要的配置如下:
# nymous_enable=YES/NO
# local_enable=YES/NO
# write_enable=YES
# local_umask=022(或者其他值)
# anon_upload_enable= YES/NO)
# anon_world_readable_only= YES/NO
# anon_mkdir_write_enable= YES/NO
# chroot_list_enable=YES
# chroot_list_file=/etc/vsftpd/chroot_list

圖2 PORT(主動)模式數據傳輸示意圖
在Linux系統中對Client端的配置,要完成以下工作:設置要連接的FTP服務器的IP,端口,用戶名,密碼,連接模式等,根據訪問法可分為三種:命令行方式、瀏覽器方式、FTPClient端工具方式。
在FTP協議中,提供FTP服務的默認端口為:21(命令端口)和20(數據端口)。在不同的工作方式下,FTP數據端口并不總是20。連接發起的對象不同,就是PORT (主動)模式與PASV (被動)模式在FTP數據傳輸中的最大不同之處。
PORT (主動)模式的FTP工作原理:首先需要Client端從的一個非特權端口N連接到FTP服務器的21端口(命令端口)。然后Client開始監聽端口N+1,并發送FTP命令“port N+1”到FTP服務器。接著Server端會將從其20端口(數據端口),連接到Client端指定的數據端口(N+1)。
一般的網絡設備都是將防火墻配置于FTP服務器前面,因而數據傳輸采取PORT(主動)方式的FTP配置須有以下條件:(1)Client端到FTP服務器的21端口(命令端口)的連接(Client端初始化的連接)。(2)FTP服務器的21(命令端口)到Client端的連接(Server 端響應 Client 端的 21(命令端口))。(3)FTP 服務器的20端口(數據端口)到Client端的連接(Server端初始化數據連接到Client端的20端口(數據端口))。(4)Client端到FTP服務器的20端口(數據端口)的連接(Client端發送ACK響應到服務器的20端口(數據端口))
PORT(主動)模式配置方法:
#主動式連接使用的數據通道
connect_from_port_20=YES
#支持數據流的被動式連接模式
pasv_enable=NO
PASV(被動)模式的FTP工作原理:在PASV(被動)方式FTP服務中,由Client端發起連接,即命令連接和數據連接,這樣就可以解決從Server端到Client端的數據端口的入方向連接被Client端防火墻過濾掉的問題。當FTP連接一但開啟時,Client端將會提供兩個任意的端口號大于1024的非特權本地端口(N >1024和N+1)。其中的一個端口連接Server端的21(命令端口),但與PORT(主動)方式的FTP配置不同,Client端不被允許提交PORT命令也不允許Server端來回連它的20(數據端口),而是提交 PASV命令。由此產生的結果是Server端會開啟一個任意的大于1024的非特權端口P(P >1024),并發送PORT P命令給Client端。然后Client端發起從本地端口N+1到Server端的端口P的連接,用來傳送數據。

圖3 (被動)模式數據傳輸示意圖
對于Server端的防火墻來說,需要有以下的通訊才能支持PASV(被動)方式的FTP服務: (1)Client端到Server端的21(命令端口)的連接(Client 端初始化的連接)。(2)Server 端的21(命令端口)到Client端的連接(Server端響應到Client端的控制端口的連接)。(3)Client端到Server端的大于1024端口的連接(Client端初始化數據連接后Server端返回的的20端口(數據端口))。(4)Server端大于1024端口到Client端的連接(Server端發送ACK響應和數據到Client端的20端口(數據端口))。
PASV(被動)模式配置方法:
# PASV(被動)式連接使用的數據通道
connect_from_port_20=NO
pasv_enable=YES(默認為YES) #設置是否允許PASV(被動)模式
pasv_min_port=1024(default:0(use any port))
pasv_max_port=65536(default:0(use any port))
Vsftpd是基于UNIX/Linux等操作系統上運行的FTP服務器,因此其具有安全、免費、便于移植到小型嵌入式系統等特點,在實際應用中具有較好的應用范圍。對數據傳輸模式的使用可采納以下結論:(1)Client端沒有防火墻時,用PORT(主動)模式連接即可。(2Server端沒有防火墻時,用PASV(被動)模式即可。(2)雙方都有防火墻時,vsftpd設置被動端口范圍,Server端防火墻打開被動端口范圍,Client端用被動模式連接即可.發布FTP服務器的時候,要注意FTP服務器有PORT(主動)和PASV(被動)兩種模式。兩者的共同點,是都使用21(命令端口)進行用戶驗證及管理,差別在于傳送數據的方式不同,PORT(主動)模式的FTP服務器數據端口被固定在20,而PASV模式則在1025-65535之間隨機。發布的時候要考慮這個差別。
A.連續出版物
[1]周曉林.彭延昌.胡慶梅.周冉.陳寶鋒.基于廣域網防火墻技術的FTP被動模式的文件傳輸[J].計算機系統應用,2006,6:80-83
[2]陳倩.嵌入式FTP服務器的設計與實現[J].電子元器件應用,2010,3:36-38B.專著
[1]楊明華.譚勵.于重重等.Linux系統與網絡服務管理技術大全[M].北京:電子工業出版社,2008:387
[2]褚建立.劉彥舫等.計算機網路技術實用教程[M].北京:清華大學出版社,2008:375C.學位論文
[1]李杰.Linux環境下FTP系統的設計與實現[D].長春:吉林大學,2012