FTP (File Transfer Protocol) 是常用的網絡協議,主要的功能是用來傳輸檔案,我們時常從 FTP 站台下載檔案。本章將介紹如何使用 FreeBSD 架設 FTP 服務器,並說明各種 FTP 服務器的管理技巧。本章除了 FreeBSD 內附的 FTP 服務器軟件外,並將介紹筆者開發的 SmbFTPD。讀完本章後,您將進一步了解下列主題:
15.1 FTP 概論
FTP 是一個歷史悠久的網絡通訊協議,和大多數的網絡協議一樣,它采用 Client/Server 架構,各地的使用者可以經由網絡連到服務器上傳或下載檔案。FTP 協議比較特別的地方在於它在使用時必須建立二個聯機:一個用來傳輸指令、一個用來傳輸檔案。
圖 15-1
當我們使用 FTP 軟件連到 FTP 服務器時,客戶端會先連到服務器的連接埠 21,並建立一條「控制聯機」(Control Stream)。接下來,您會輸入賬號、密碼等指令,這些指令及 FTP 的響應都是使用都是使用「控制聯機」。當您要下載檔案時,或者是執行 ls 以列出目錄中的檔案時,檔案或目錄列表的下載是經另一個聯機「數據聯機」(Data Stream)。「數據聯機」和「控制聯機」不同的是數據聯機所傳輸的數據比較大,而控制聯機只是用來傳輸指令及簡單的響應。
基本上,一個完整的 FTP 聯機建立過程為:
上述這種聯機建立的方式是由服務器主動建立「數據聯機」,我們稱之為「主動模式」(Active Mode)。基本上主動模式的運作在沒有防火牆或 NAT 的情形下沒有什麼問題,但若客戶端有防火牆,則可能會無法建立聯機。
圖 15-2
因為「控制聯機」是由客戶端主動連到服務器,所以在客戶端有防火牆或 NAT 時,還是可以連到服務器。接下來在建立「數據聯機」時,客戶端會從「控制聯機」中告訴服務器它的 IP 及埠號,請服務器連過來。但是由於客戶端有防火牆,所以服務器要連到客戶端時會失敗,而無法建立聯機。
基本上,如果客戶端使用的是 FreeBSD 的 NAT 不會有這種問題,FreeBSD 會自動做轉換,但若是使用其它的防火牆就不一定可以支持 FTP 的 Active Mode。
何謂 Passive Mode
要解決 FTP Active Mode 的問題,可以在聯機時改用「被動模式」(Passive Mode)。所謂的被動模式就是由服務器打開一個連接埠,被動地等客戶端連過來建立「數據聯機」。被動模式的聯機建立過程為:
圖 15-3
由於控制聯機及數據聯機都是由客戶端主動連過去服務器,如此即可避開防火牆及 NAT 的問題。我們來看看如何判斷聯機失敗是否因為主動模式的原因:
# ftp ftp.freebsd.org Trying 204.152.184.73... Connected to ftp.freebsd.org (204.152.184.73). 220 Welcome to freebsd.isc.org. Name (ftp.freebsd.org:alex): anonymous 331 Please specify the password. Password: 230- 230-You have reached the freebsd.isc.org FTP server, serving the 230-full FreeBSD FTP archive over IPv4 (204.152.184.73) and IPv6 230-(2001:4f8:0:2::e) networks. This server is also known as: 230- 230- ftp.freebsd.org 230- ftp4.freebsd.org 230- ftp4.us.freebsd.org 230- 230-This server is operated by Internet Systems Consortium (ISC), 230-on behalf of the FreeBSD Project, with hardware donations from 230-Apple, Intel and Iron Systems. 230- 230-Questions about this service can be sent to: [email protected]. 230- 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls ^C ftp> passive Passive mode on ftp> ls 227 Entering Passive Mode (204,152,184,73,54,200) 150 Here comes the directory listing. drwxrwxr-x 3 0 0 512 Apr 17 2003 pub 226 Directory send OK. ftp>
當您登入一台 FTP 服務器後,如果您輸入 ls,卻等了很久都沒有響應,您可以輸入 <Ctrl>+C 以中斷命令。接著輸入 passive 以進入被動模式,再打 ls 就可以看到目錄內容,則無法聯機的問題一定是主動模式的原故。
15.2 設定 FTP 服務器
FreeBSD 內建有 FTP 服務器的功能,如果您要使用內建的 ftpd,我們不需要特別進行任何安裝的動作,只要做好設定即可。本小節中,我們將介紹如何設定啟動 FTP 服務器的功能,並進行一些基本的配置。
15.2.1 啟動 FTP 服務器