複製鏈接
請複製以下鏈接發送給好友

FTP

(文件傳輸協議)

鎖定
文件傳輸協議(File Transfer Protocol,FTP)是用於在網絡上進行文件傳輸的一套標準協議,它工作在 OSI 模型的第七層, TCP 模型的第四層, 即應用層, 使用 TCP 傳輸而不是 UDP, 客户在和服務器建立連接前要經過一個“三次握手”的過程, 保證客户與服務器之間的連接是可靠的, 而且是面向連接, 為數據傳輸提供可靠保證。 [1] 
FTP允許用户以文件操作的方式(如文件的增、刪、改、查、傳送等)與另一主機相互通信。然而, 用户並不真正登錄到自己想要存取的計算機上面而成為完全用户, 可用FTP程序訪問遠程資源, 實現用户往返傳輸文件、目錄管理以及訪問電子郵件等等, 即使雙方計算機可能配有不同的操作系統和文件存儲方式。 [1] 
中文名
文件傳輸協議
外文名
ftp
默認端口
21
用    途
進行文件傳輸
傳輸文件類型
ASCII文件和二進制文件
工作模式
客户機/服務器模式

FTP簡介

FTP 是因特網網絡上歷史最悠久的網絡工具,從 1971 年由 A KBHUSHAN 提出第一個 FTP 的RFC(RFC114) [2]  至今近半個世紀來,FTP 憑藉其獨特的優勢一直都是因特網中最重要、最廣泛的服務之一。 [3] 
FTP 的目標是提高文件的共享性,提供非直接使用遠程計算機,使存儲介質對用户透明和可靠高效地傳送數據。它能操作任何類型的文件而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有着極高的延時,這意味着,從開始請求到第一次接收需求數據之間的時間,會非常長;並且不時的必須執行一些冗長的登錄進程。 [4-5] 

FTP工作原理

圖1 FTP 的基本模型 圖1 FTP 的基本模型 [1]
FTP 採用 Internet 標準文件傳輸協議 FTP 的用户界面, 向用户提供了一組用來管理計算機之間文件傳輸的應用程序。
FTP 是基於客户———服務器(C/S)模型而設計的,在客户端與 FTP 服務器之間建立兩個連接。
開發任何基於 FTP 的客户端軟件都必須遵循 FTP 的工作原理,FTP 的獨特的優勢同時也是與其它客户服務器程序最大的不同點就在於它在兩台通信的主機之間使用了兩條 TCP 連接,一條是數據連接,用於數據傳送;另一條是控制連接,用於傳送控制信息(命令和響應),這種將命令和數據分開傳送的思想大大提高了 FTP 的效率,而其它客户服務器應用程序一般只有一條 TCP 連接。圖 1 給出了 FTP 的基本模型。客户有三個構件:用户接口、客户控制進程和客户數據傳送進程。服務器有兩個構件:服務器控制進程和服務器數據傳送進程。在整個交互的 FTP 會話中,控制連接始終是處於連接狀態的,數據連接則在每一次文件傳送時先打開後關閉。 [3] 

FTP用户分類

FTPReal賬户

這類用户是指在FTP服務上擁有賬號。當這類用户登錄FTP服務器的時候,其默認的主目錄就是其賬號命名的目錄。但是,其還可以變更到其他目錄中去。如系統的主目錄等等。

FTPGuest用户

在FTP服務器中,我們往往會給不同的部門或者某個特定的用户設置一個賬户。但是,這個賬户有個特點,就是其只能夠訪問自己的主目錄。服務器通過這種方式來保障FTP服務上其他文件的安全性。這類賬户,在Vsftpd軟件中就叫做Guest用户。擁有這類用户的賬户,只能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的文件。

FTPAnonymous用户

這也是我們通常所説的匿名訪問。這類用户是指在FTP服務器中沒有指定賬户,但是其仍然可以進行匿名訪問某些公開的資源。
在組建FTP服務器的時候,我們就需要根據用户的類型,對用户進行歸類。默認情況下,Vsftpd服務器會把建立的所有賬户都歸屬為Real用户。但是,這往往不符合企業安全的需要。因為這類用户不僅可以訪問自己的主目錄,而且,還可以訪問其他用户的目錄。這就給其他用户所在的空間帶來一定的安全隱患。所以,企業要根據實際情況,修改用户所在的類別。

FTP傳輸方式

FTP的傳輸有兩種方式:ASCII、二進制。 [6] 
ASCII傳輸方式
假定用户正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便於把文件解釋成另外那台計算機存儲文本文件的格式。
但是常常有這樣的情況,用户正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝。
二進制傳輸模式
在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。
如在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會損壞數據。(ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果傳輸二進制文件,所有的位都是重要的。)

FTP支持模式

FTP客户端發起FTP會話,與FTP服務器建立相應的連接。FTP會話期間要建立控制信息進程與數據進程兩個連接。控制連接不能完成傳輸數據的任務,只能用來傳送FTP執行的內部命令以及命令的響應等控制信息;數據連接是服務器與客户端之間傳輸文件的連接,是全雙工的,允許同時進行雙向數據傳輸。當數據傳輸完成後,數據連接會撤消,再回到FTP會話狀態,直到控制連接被撤消,並退出會話為止。 [7] 
FTP支持兩種模式:Standard (PORT方式,主動方式),Passive (PASV,被動方式)。
Port模式
FTP 客户端首先和服務器的TCP 21端口建立連接,用來發送命令,客户端需要接收數據的時候在這個通道上發送PORT命令。PORT命令包含了客户端用什麼端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客户端的指定端口發送數據。FTP server必須和客户端建立一個新的連接用來傳送數據。
Passive模式
建立控制通道和Standard模式類似,但建立連接後發送Pasv命令。服務器收到Pasv命令後,打開一個臨時端口(端口號大於1023小於65535)並且通知客户端在這個端口上傳送數據的請求,客户端連接FTP服務器此端口,然後FTP服務器將通過這個端口傳送數據。
很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆後或內網的FTP服務器不支持PASV模式,因為客户端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客户端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客户端建立一個新的連接,造成無法工作。

FTP命令參數

FTP命令是Internet用户使用最頻繁的命令之一,不論是在DOS還是UNIX操作系統下使用FTP,都會遇到大量的FTP內部命令,熟悉並靈活應用FTP的內部命令,可以大大方便使用者,特別對於現在撥號上網的用户,熟練使用FTP內部命令,可以大大減少在線時間。 [6] 

FTP簡介

1.FTP服務器的登陸
匿名用户:FTP 口令:FTP
用户:ANONYMOUS 口令:任何電子郵件
2.顯示文件信息:DIR/LS
3.下載文件:GET 文件名(下載到當前目錄)
4.上傳文件:PUT 文件名
5.多文件下載:MGET
6.多文件上傳:MPUT
7.退出:BYE
8.幫助:HELP

FTP用途

在本地主機和遠程主機之間傳送文件。

FTP語法

ftp [ -d] [ -g ] [ -i ] [ -n ] [ -v] [ -f ] [ -k realm] [-q[-C]][ HostName [ Port ] ]

FTP描述

-C 允許用户指定:通過 send_file 命令發出的文件必須在網絡高速緩衝區(NBC)中經過緩存處理。此標誌必須在指定了-q 標誌的情況下使用。只有當文件在無保護的情況下以二進制方式發送時此標誌才適用。
-d 將有關 ftp 命令操作的調試信息發送給 syslogd 守護進程。如果您指定-d 標誌,您必須編輯/etc/syslog.conf 文件並添加下列中的一項:
OR
user.debug FileName
請注意: syslogd 守護進程調試級別包含信息級別消息。
如果不編輯/etc/syslog.conf 文件,則不會產生消息。變更了/etc/syslog.conf 文件之後,請運行 refresh -s syslogd 或 kill -1 SyslogdPID 命令,以通知 syslogd 守護進程其配置文件的變更。關於調試級別的更多信息,請參考/etc/syslog.conf 文件。也請參考 debug 子命令。
圖2 FTP 工作示意圖 圖2 FTP 工作示意圖
-g 禁用文件名中的元字符拓展。解釋元字符可參考為擴展(有時叫做文件名匹配替換)文件名。請參考 glob 子命令。
-i 關閉多文件傳送中的交互式提示。請參考 prompt、mget、mput 和 mdelete 子命令,以取得多文件傳送中的提示的描述。
-n 防止在起始連接中的自動登錄。否則, ftp 命令會搜索$HOME/.netrc 登錄項,該登錄項描述了遠程主機的登錄和初始化過程。請參考 user 子命令。
-q 允許用户指定: send_file 子例程必須用於在網絡上發送文件。只有當文件在無保護的情況下以二進制方式發送時此標誌才適用。
-v 顯示遠程服務器的全部響應,並提供數據傳輸的統計信息。當 ftp 命令的輸出是到終端(如控制枱或顯示)時,此顯示方式是缺省方式。
如果 stdin 不是終端,除非用户調用帶有-v 標誌的 ftp 命令,或發送 verbose 子命令,否則 ftp 詳細方式將禁用。
-f 導致轉發憑證。如果Kerberos 5 不是當前認證方法,則此標誌將被忽略。
-k realm 如果遠程站的域不同於本地系統的域,系統將允許用户指定遠程站的域。因此,域和DCE 單元是同義的。如果Kerberos 5 不是當前認證方法,則此標誌將被忽略。

FTP處理規則

ftp 命令使用“文件傳送協議”(FTP) 在本地和遠程主機或遠程主機之間傳送文件。
FTP 協議允許在使用不同文件系統的主機之間進行數據傳送。儘管協議在傳送數據中提供了很高的靈活度,它仍然不會嘗試保留特定於某個文件系統的文件屬性(如文件保護模式或修改時間)。而且,FTP 協議為文件系統的整體結構做了少許假設,且不提供或不允許諸如循環地複製子目錄這樣的函數。
請注意:如果您正在系統之間傳送文件,且需要保存文件屬性或遞歸地複製子目錄,請使用 rcp 命令。
您可以在 ftp> 提示符中輸入子命令,執行類似這樣的任務:列出遠程目錄、更改當前的本地和遠程目錄、在單一請求中傳送多個文件、創建和除去目錄,以及轉義到本地 shell 執行 shell 命令。
如果您執行 ftp 命令而不為遠程主機指定HostName 參數,ftp 命令會立即顯示 ftp> 提示符,等待 ftp 子命令。要連接遠程主機,請執行 open 子命令。當 ftp 命令連接到遠程主機時,ftp 命令在再次顯示提示符 ftp> 之前會提示輸入登錄名和密碼。如果遠程主機中未定義登錄名的密碼,ftp 命令將不成功。
ftp 命令解釋器(處理在 ftp> 提示符處輸入的全部子命令),會提供大多數文件傳送程序沒有的性能,如:
* 對 ftp 子命令處理文件名參數
* 將一組子命令集中成一個單一的子命令
* 從$HOME/.netrc 文件中裝入宏
這些性能會幫助您簡化重複的任務,並允許您在 unattended 方式使用 ftp 命令。
命令解釋器將按照下列規則處理文件名參數:
* 如果為此參數指定了-(連字符),則標準輸入 (stdin) 將用於讀取操作,而標準輸出用於寫入操作。
* 如果未應用前面的檢查,且文件名擴展已啓用(請參考-g 標誌或 glob 子命令),則解釋器將根據C shell 的規則擴展文件名。啓用了文件名匹配替換以及在期待單一文件名的子命令中使用了模式匹配字符時,結果可能與期待的不一樣。
例如,append 和 put 子命令將拓展文件名,然後僅使用所生成第一個文件名。其它 ftp 子命令,如 cd、delete, get、mkdir、rename 和 rmdir 不會執行文件名拓展,並從字面上接受模式匹配字符。
* 對於 get、put、mget 和 mput 子命令,解釋器有能力在不同的本地和遠程文件名語法樣式之間進行翻譯和映射(請參考 case、ntrans 和 nmap 子命令),並且在本地文件名不是唯一的情況下有修改它的能力(請參考 runique 子命令)。另外,如果遠程文件名不是唯一的,則 ftp 命令可將指令發送到遠程 ftpd 服務器,以修改遠程的文件名(請參考 sunique 子命令)。
* 使用雙引號(" ") 指定包含空字符的參數。
請注意:ftp 命令解釋器不支持管道。也無需支持所有多字節字符文件名。
要在互動地運行的時候結束 ftp 會話,請使用 quit 或 bye 子命令或 ftp> 提示符處的End of File (Ctrl-D) 按鍵順序。要在文件傳送未完成之前結束它,請按中斷按鍵順序。其缺省“中斷鍵”序列是Ctrl-C。stty 指令能用於重新定義該鍵系列。
ftp 命令在正常情況下會立即暫停正在發送(從本地主機到遠端主機)的傳輸。ftp 命令通過將FTP ABOR 指令發送到遠程FTP 服務器,來暫停正在接收的傳輸(從遠程主機到本地主機),並廢棄所有傳入的文件傳送包(直到遠程服務器停止發送它們為止)。如果遠程服務器不支持ABOR 指令,在遠程服務器未發送所有請求的文件之前,ftp 命令不會顯示 ftp> 提示符。另外,如果遠程服務器執行未期望的操作時,可能需要結束本地 ftp 進程。

FTP匿名FTP

默認狀態下,FTP 站點允許匿名訪問,FTP 服務器接受對該資源的所有請求,並且不提示用户輸入用户名或密碼。如果站點中存儲有重要的或敏感的信息,只允許授權用户訪問,應禁止匿名訪問。 [8] 
使用FTP時必須首先登錄,在遠程主機上獲得相應的權限以後,方可下載或上傳文件。也就是説,要想同哪一台計算機傳送文件,就必須具有哪一台計算機的適當授權。換言之,除非有用户ID和口令,否則便無法傳送文件。這種情況違背了Internet的開放性,Internet上的FTP主機何止千萬,不可能要求每個用户在每一台主機上都擁有賬號。匿名FTP就是為解決這個問題而產生的。
匿名FTP是這樣一種機制,用户可通過它連接到遠程主機上,並從其下載文件,而無需成為其註冊用户。系統管理員建立了一個特殊的用户ID,名為anonymous, Internet上的任何人在任何地方都可使用該用户ID。
通過FTP程序連接匿名FTP主機的方式同連接普通FTP主機的方式差不多,只是在要求提供用户標識ID時必須輸入anonymous,該用户ID的口令可以是任意的字符串。習慣上,用自己的E-mail地址作為口令,使系統維護程序能夠記錄下來誰在存取這些文件。
值得注意的是,匿名FTP不適用於所有Internet主機,它只適用於那些提供了這項服務的主機。
當遠程主機提供匿名FTP服務時,會指定某些目錄向公眾開放,允許匿名存取。系統中的其餘目錄則處於隱匿狀態。作為一種安全措施,大多數匿名FTP主機都允許用户從其下載文件,而不允許用户向其上傳文件,也就是説,用户可將匿名FTP主機上的所有文件全部拷貝到自己的機器上,但不能將自己機器上的任何一個文件拷貝至匿名FTP主機上。即使有些匿名FTP主機確實允許用户上傳文件,用户也只能將文件上傳至某一指定上傳目錄中。隨後,系統管理員會去檢查這些文件,他會將這些文件移至另一個公共下載目錄中,供其他用户下載,利用這種方式,遠程主機的用户得到了保護,避免了有人上傳有問題的文件,如帶病毒的文件。
參考資料