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

圖1 設(shè)置自動(dòng)運(yùn)行Vsftpd服務(wù)
此外,還有一種方法也可完成配置。依次選擇【系統(tǒng)】|【管理】|【服務(wù)器設(shè)置】|【服務(wù)】命令,系統(tǒng)將打開【服務(wù)配置】窗口,在窗口中找到【vsftpd】選項(xiàng),就可以對Vsftpd執(zhí)行啟動(dòng)、停止和重啟等操作。選中【vsftpd】選項(xiàng)前面的復(fù)選框,則可以在每次啟動(dòng)系統(tǒng)時(shí)自動(dòng)運(yùn)行Vsftpd服務(wù)。
同樣的,用戶可以通過修改主配置文件vsftpd.conf來完成Vsftpd服務(wù)器的主要配置工作。需要注意的是,一旦用戶更改vsftpd.conf文件后,要使設(shè)置生效必須重新啟動(dòng)配置后的Vsftpd服務(wù)。Vsftpd的主要配置文件位于Linux操作系統(tǒng)的/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(主動(dòng))模式數(shù)據(jù)傳輸示意圖
在Linux系統(tǒng)中對Client端的配置,要完成以下工作:設(shè)置要連接的FTP服務(wù)器的IP,端口,用戶名,密碼,連接模式等,根據(jù)訪問法可分為三種:命令行方式、瀏覽器方式、FTPClient端工具方式。
在FTP協(xié)議中,提供FTP服務(wù)的默認(rèn)端口為:21(命令端口)和20(數(shù)據(jù)端口)。在不同的工作方式下,F(xiàn)TP數(shù)據(jù)端口并不總是20。連接發(fā)起的對象不同,就是PORT (主動(dòng))模式與PASV (被動(dòng))模式在FTP數(shù)據(jù)傳輸中的最大不同之處。
PORT (主動(dòng))模式的FTP工作原理:首先需要Client端從的一個(gè)非特權(quán)端口N連接到FTP服務(wù)器的21端口(命令端口)。然后Client開始監(jiān)聽端口N+1,并發(fā)送FTP命令“port N+1”到FTP服務(wù)器。接著Server端會將從其20端口(數(shù)據(jù)端口),連接到Client端指定的數(shù)據(jù)端口(N+1)。
一般的網(wǎng)絡(luò)設(shè)備都是將防火墻配置于FTP服務(wù)器前面,因而數(shù)據(jù)傳輸采取PORT(主動(dòng))方式的FTP配置須有以下條件:(1)Client端到FTP服務(wù)器的21端口(命令端口)的連接(Client端初始化的連接)。(2)FTP服務(wù)器的21(命令端口)到Client端的連接(Server 端響應(yīng) Client 端的 21(命令端口))。(3)FTP 服務(wù)器的20端口(數(shù)據(jù)端口)到Client端的連接(Server端初始化數(shù)據(jù)連接到Client端的20端口(數(shù)據(jù)端口))。(4)Client端到FTP服務(wù)器的20端口(數(shù)據(jù)端口)的連接(Client端發(fā)送ACK響應(yīng)到服務(wù)器的20端口(數(shù)據(jù)端口))
PORT(主動(dòng))模式配置方法:
#主動(dòng)式連接使用的數(shù)據(jù)通道
connect_from_port_20=YES
#支持?jǐn)?shù)據(jù)流的被動(dòng)式連接模式
pasv_enable=NO
PASV(被動(dòng))模式的FTP工作原理:在PASV(被動(dòng))方式FTP服務(wù)中,由Client端發(fā)起連接,即命令連接和數(shù)據(jù)連接,這樣就可以解決從Server端到Client端的數(shù)據(jù)端口的入方向連接被Client端防火墻過濾掉的問題。當(dāng)FTP連接一但開啟時(shí),Client端將會提供兩個(gè)任意的端口號大于1024的非特權(quán)本地端口(N >1024和N+1)。其中的一個(gè)端口連接Server端的21(命令端口),但與PORT(主動(dòng))方式的FTP配置不同,Client端不被允許提交PORT命令也不允許Server端來回連它的20(數(shù)據(jù)端口),而是提交 PASV命令。由此產(chǎn)生的結(jié)果是Server端會開啟一個(gè)任意的大于1024的非特權(quán)端口P(P >1024),并發(fā)送PORT P命令給Client端。然后Client端發(fā)起從本地端口N+1到Server端的端口P的連接,用來傳送數(shù)據(jù)。

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