簡介
FTP 是因特網網絡上曆史最悠久的網絡工具,從 1971 年由 A KBHUSHAN 提出第一個 FTP 的RFC(RFC114) [2] 至今近半個世紀來,FTP 憑借其獨特的優勢一直都是因特網中最重要、最廣泛的服務之一。
FTP 的目标是提高文件的共享性,提供非直接使用遠程計算機,使存儲介質對用戶透明和可靠高效地傳送數據。它能操作任何類型的文件而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有着極高的延時,這意味着,從開始請求到第一次接收需求數據之間的時間,會非常長;并且不時的必須執行一些冗長的登錄進程。
工作原理
與大多數Internet服務一樣,FTP也是一個客戶機/服務器系統。用戶通過一個支持FTP協議的客戶機程序,連接到在遠程主機上的FTP服務器程序。用戶通過客戶機程序向服務器程序發出命令,服務器程序執行用戶所發出的命令,并将執行的結果返回到客戶機。比如說,用戶發出一條命令,要求服務器向用戶傳送某一個文件的一份拷貝,服務器會響應這條命令,将指定文件送至用戶的機器上。客戶機程序代表用戶接收到這個文件,将其存放在用戶目錄中。
在FTP的使用當中,用戶經常“下載”(Download)和“上載”(Upload)。“下載”文件就是從遠程主機拷貝文件至自己的計算機上;“上載”文件就是将文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上載(下載)文件。
使用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主機确實允許用戶上載文件,用戶也隻能将文件上載至某一指定上載目錄中。随後,系統管理員會去檢查這些文件,他會将這些文件移至另一個公共下載目錄中,供其他用戶下載,利用這種方式,遠程主機的用戶得到了保護,避免了有人上載有問題的文件,如帶病毒的文件。
作為一個Internet用戶,可通過FTP在任何兩台Internet主機之間拷貝文件。但是,實際上大多數人隻有一個Internet帳戶,FTP主要用于下載公共文件,例如共享軟件、各公司技術支持文件等。Internet上有成千上萬台匿名FTP主機,這些主機上存放着數不清的文件,供用戶免費拷貝。實際上,幾乎所有類型的信息,所有類型的計算機程序都可以在Internet上找到。這是Internet吸引重要原因之一。
匿名FTP使用戶有機會存取到世界上最大的信息庫,這個信息庫是日積月累起來的,并且還在不斷增長,永不關閉,涉及到幾乎所有主題。而且,這一切是免費的。
匿名FTP是Internet網上發布軟件的常用方法。Internet之所以能延續到今天,是因為人們使用通過标準協議提供标準服務的程序。像這樣的程序,有許多就是通過匿名FTP發布的,任何人都可以存取它們。
Internet中的有數目巨大的匿名FTP主機以及更多的文件,那麼到底怎樣才能知道某一特定文件位于哪個匿名FTP主機上的那個目錄中。這正是Archie服務器所要完成的工作。Archie将自動在FTP主機中進行搜索,構造一個包含全部文件目錄信息的數據庫,使你可以直接找到所需文件的位置信息。
用戶分類
Real帳戶
這類用戶是指在FTP服務上擁有帳号。當這類用戶登錄FTP服務器的時候,其默認的主目錄就是其帳号命名的目錄。但是,其還可以變更到其他目錄中去。如系統的主目錄等等。
Guest用戶
在FTP服務器中,我們往往會給不同的部門或者某個特定的用戶設置一個帳戶。但是,這個賬戶有個特點,就是其隻能夠訪問自己的主目錄。服務器通過這種方式來保障FTP服務上其他文件的安全性。這類帳戶,在Vsftpd軟件中就叫做Guest用戶。擁有這類用戶的帳戶,隻能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的文件。
Anonymous用戶
這也是我們通常所說的匿名訪問。這類用戶是指在FTP服務器中沒有指定帳戶,但是其仍然可以進行匿名訪問某些公開的資源。
在組建FTP服務器的時候,我們就需要根據用戶的類型,對用戶進行歸類。默認情況下,Vsftpd服務器會把建立的所有帳戶都歸屬為Real用戶。但是,這往往不符合企業安全的需要。因為這類用戶不僅可以訪問自己的主目錄,而且,還可以訪問其他用戶的目錄。這就給其他用戶所在的空間帶來一定的安全隐患。所以,企業要根據實際情況,修改用戶所在的類别。
傳輸方式
FTP的傳輸有兩種方式:ASCII、二進制。
ASCII傳輸方式
假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的内容以便于把文件解釋成另外那台計算機存儲文本文件的格式。
但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝。
二進制傳輸模式
在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。
如在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會損壞數據。(ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果傳輸二進制文件,所有的位都是重要的。)
支持模式
FTP客戶端發起FTP會話,與FTP服務器建立相應的連接。FTP會話期間要建立控制信息進程與數據進程兩個連接。控制連接不能完成傳輸數據的任務,隻能用來傳送FTP執行的内部命令以及命令的響應等控制信息;數據連接是服務器與客戶端之間傳輸文件的連接,是全雙工的,允許同時進行雙向數據傳輸。當數據傳輸完成後,數據連接會撤消,再回到FTP會話狀态,直到控制連接被撤消,并退出會話為止。
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命令是Internet用戶使用最頻繁的命令之一,不論是在DOS還是UNIX操作系統下使用FTP,都會遇到大量的FTP内部命令,熟悉并靈活應用FTP的内部命令,可以大大方便使用者,特别對于現在撥号上網的用戶,熟練使用FTP内部命令,可以大大減少在線時間。
簡介
1.FTP服務器的登陸
匿名用戶:FTP 口令:FTP
用戶:ANONYMOUS 口令:任何電子郵件
2.顯示文件信息:DIR/LS
3.下載文件:GET 文件名(下載到當前目錄)
4.上傳文件:PUT 文件名
5.多文件下載:MGET
6.多文件上傳:MPUT
7.退出:BYE
8.幫助:HELP
用途
在本地主機和遠程主機之間傳送文件。
語法
ftp [ -d] [ -g ] [ -i ] [ -n ] [ -v] [ -f ] [ -k realm] [-q[-C]][ HostName [ Port ] ]
描述
-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 子命令。
-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 協議為文件系統的整體結構做了少許假設,且不提供或不允許諸如循環地複制子目錄這樣的函數。
請注意:如果您正在系統之間傳送文件,且需要保存文件屬性或遞歸地複制子目錄,請使用 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時必須首先登錄,在遠程主機上獲得相應的權限以後,方可下載或上傳文件。也就是說,要想同哪一台計算機傳送文件,就必須具有哪一台計算機的适當授權。換言之,除非有用戶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主機确實允許用戶上傳文件,用戶也隻能将文件上傳至某一指定上傳目錄中。随後,系統管理員會去檢查這些文件,他會将這些文件移至另一個公共下載目錄中,供其他用戶下載,利用這種方式,遠程主機的用戶得到了保護,避免了有人上傳有問題的文件,如帶病毒的文件。