運行機制
FTP伺服器
簡單地說,支持FTP協定的伺服器就是FTP伺服器。
與大多數Internet服務一樣,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主機確實允許用戶上傳檔案,用戶也只能將檔案上傳至某一指定上傳目錄中。隨後,系統管理員會去檢查這些檔案,他會將這些檔案移至另一個公共下載目錄中,供其他用戶下載,利用這種方式,遠程主機的用戶得到了保護,避免了有人上傳有問題的檔案,如帶病毒的檔案。
用戶分類
Real帳戶
這類用戶是指在FTP服務上擁有帳號。當這類用戶登錄FTP伺服器的時候,其默認的主目錄就是其帳號命名的目錄。但是,其還可以變更到其他目錄中去。如系統的主目錄等等。
Guest用戶
在FTP伺服器中,我們往往會給不同的部門或者某個特定的用戶設定一個帳戶。但是,這個賬戶有個特點,就是其只能夠訪問自己的主目錄。伺服器通過這種方式來保障FTP服務上其他檔案的安全性。這類帳戶,在Vsftpd軟體中就叫做Guest用戶。擁有這類用戶的帳戶,只能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的檔案。
Anonymous(匿名)用戶
這也是我們通常所說的匿名訪問。這類用戶是指在FTP伺服器中沒有指定帳戶,但是其仍然可以進行匿名訪問某些公開的資源。
在組建FTP伺服器的時候,我們就需要根據用戶的類型,對用戶進行歸類。默認情況下,Vsftpd伺服器會把建立的所有帳戶都歸屬為Real用戶。但是,這往往不符合企業安全的需要。因為這類用戶不僅可以訪問自己的主目錄,而且,還可以訪問其他用戶的目錄。這就給其他用戶所在的空間帶來一定的安全隱患。所以,企業要根據實際情況,修改用戶所在的類別。
使用方式
TCP/IP協定中,FTP標準命令TCP連線埠號為21,Port方式數據連線埠為20。FTP的任務是從一台計算機將檔案傳送到另一台計算機,不受作業系統的限制。
需要進行遠程檔案傳輸的計算機必須安裝和運行ftp客戶程式。在windows作業系統的安裝過程中,通常都安裝了tcp/ip協定軟體,其中就包含了ftp客戶程式。但是該程式是字元界面而不是圖形界面,這就必須以命令提示符的方式進行操作,很不方便。
啟動ftp客戶程式工作的另一途徑是使用ie瀏覽器,用戶只需要在ie地址欄中輸入如下格式的url地址:ftp://[用戶名:口令@]ftp伺服器域名:[連線埠號]
(在CMD命令行下也可以用上述方法連線,通過put命令和get命令達到上傳和下載的目的,通過ls命令列出目錄,除了上述方法外還可以在cmd下輸入ftp回車,然後輸入open IP來建立一個連線,此方法還適用於linux下連線ftp伺服器)
通過ie瀏覽器啟動ftp的方法儘管可以使用,但是速度較慢,還會將密碼暴露在ie瀏覽器中而不安全。因此一般都安裝並運行專門的ftp客戶程式。
1.在本地電腦上登入到國際網際網路。
2.搜尋有檔案共享主機或者個人電腦(一般有專門的FTP伺服器網站上公布的,上面有進入該主機或個人電腦的名稱,口令和路徑).
3.當與遠程主機或者對方的個人電腦建立連線後,用對方提供的用戶名和口令登入到該主機或對方的個人電腦。
4.在遠程主機或對方的個人電腦登入成功後,就可以上傳你想跟別人分享的東西或者下載別人授權共享的東西(這裡的東西是指能放到電腦里去又能在顯示屏上看到的東西).
5.完成工作後關閉FTP下載軟體,切斷連線。
傳輸方式
FTP的傳輸有兩種方式:ASCII、二進制。
ASCII傳輸方式
假定用戶正在拷貝的檔案包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當檔案傳輸時ftp通常會自動地調整檔案的內容以便於把檔案解釋成另外那台計算機存儲文本檔案的格式。
但是常常有這樣的情況,用戶正在傳輸的檔案包含的不是文本檔案,它們可能是程式,資料庫,字處理檔案或者壓縮檔案。在拷貝任何非文本檔案之前,用binary 命令告訴ftp逐字拷貝。
二進制傳輸模式
在二進制傳輸中,保存檔案的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的檔案是沒意義的。例如,macintosh以二進制方式傳送執行檔到Windows系統,在對方系統上,此檔案不能執行。
如在ASCII方式下傳輸二進制檔案,即使不需要也仍會轉譯。這會損壞數據。(ASCII方式一般假設每一字元的第一有效位無意義,因為ASCII字元組合不使用它。如果傳輸二進制檔案,所有的位都是重要的。)
支持模式
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無法和內部網路的客戶端建立一個新的連線,造成無法工作。
命令參數
簡介
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 命令並指定遠程主機的主機名 (HostName), ftp 命令會嘗試建立一個對於指定主機的連線。如果 ftp 命令連線成功,ftp 命令會在當前目錄或主目錄中搜尋本地的$HOME/.netrc 檔案。如果檔案存在,ftp 命令會在檔案中搜尋啟動登錄過程的入口,在命令宏定義中搜尋遠程主機。如果$HOME/.netrc 檔案或自動登錄項不存在,或是系統已使用 securetcpip 命令保護起來, ftp 命令會提示用戶輸入用戶名和密碼。不論命令行中是否指定HostName 參數,該指令都會顯示此提示。
請注意:排隊系統不支持多位元組主機名。
如果 ftp 命令找到指定主機的$HOME/.netrc 自動登錄項, ftp 會試圖使用該登錄項中的信息登錄遠程主機。ftp 命令也會載入任何在登錄項中定義的命令宏。在某些情況(例如,所需的密碼在自動登錄項中沒有列出來),ftp 命令會在顯示 ftp> 提示符之前提示輸入密碼。
一旦 ftp 命令完成自動登錄,如果宏是在自動登錄項中定義的,ftp 命令就會執行init 宏。如果init 宏不存在或未包含 quit 或 bye 子命令,ftp 命令將顯示 ftp> 提示符並等待子命令。
請注意:在提示符或在 $HOME/.netrc 檔案中指定的遠程主機名必須存在,並擁有在遠程主機中定義的密碼。否則,ftp 指令無效。
如果Kerberos 5 是當前的認證方法:
ftp 命令會按在IETF 草稿文擋"draft-ietf-cat-ftpsec-09.txt" 定義的那樣將此拓展用於 ftp 規範。FTP 安全性擴展將使用“Generic Security Service API (GSSAPI)”安全機制來實現。GSSAPI 提供對於基礎的安全性和通信機制來說是獨立的服務。GSSAPI 是在 rfc 1508 和1509 中定義的。
ftp 命令將使用AUTH 和ADAT 命令驗證 ftpd 守護進程。如果兩者都支持Kerberos 認證,則它們會使用本地用戶 DCE 憑證驗證遠程系統上的用戶。如果這樣失敗了,且兩個系統中都配置了“標準的”認證,則會使用上述的過程。
HostName 參數是傳送檔案的目的地主機名稱。可選的Port 參數指定了連線埠的標識符,通過此連線埠進行傳輸。(/etc/services 檔案指定了預設連線埠。)
傳輸協定
FTP是一個8位的客戶端-伺服器協定,能操作任何類型的檔案而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間,會非常長;並且不時的必須執行一些冗長的登入進程。