在眾多網路應用中,FTP(檔案傳輸通訊協定)有著非常重要的地位。Internet中一個十分重要的資源就是軟體資源,而各種各樣的軟體資源大多數都放在FTP伺服器中。與大多數Internet服務一樣,FTP也是一個客戶機/伺服器系統。使用者通過一個支援FTP協議的客戶機程式,串連到主機上的FTP伺服器程式。使用者通過客戶機程式向伺服器程式發出命令,伺服器程式執行使用者發出的命令,並將執行結果返回給客戶機。
FTP服務可以根據服務物件的不同分為兩類:系統FTP伺服器只允許系統上的合法使用者使用;匿名FTP伺服器(Anonymous FTP Server)允許任何人登入到FTP伺服器去擷取檔案。
FTP的資料轉送模式針對FTP資料連線而言,分為主動傳輸模式、被動傳輸模式和單連接埠傳輸模式三種。
1.主動傳輸模式
當FTP的控制串連建立,客戶提出目錄列表、傳輸檔案時,用戶端發出PORT命令與伺服器進行協商,FTP伺服器使用一個標準連接埠20作為伺服器端的資料連線連接埠(ftp-data),與客戶建立資料連線。連接埠20隻用於串連源地址是伺服器端的情況,並且連接埠20沒有監聽進程來監聽客戶請求。
在主動傳輸模式下,FTP的資料連線和控制串連方向相反,由伺服器向用戶端發起一個用於資料轉送的串連。用戶端的串連連接埠由伺服器端和用戶端通過協商確定。
2.被動傳輸模式
當FTP的控制串連建立,客戶提出目錄列表、傳輸檔案時,用戶端發送PASV命令使伺服器處於被動傳輸模式,FTP伺服器等待客戶與其聯絡。FTP伺服器在非20連接埠的其它資料轉送連接埠上監聽客戶請求。
在被動傳輸模式下,FTP的資料連線和控制串連方向一致,由用戶端向伺服器發起一個用於資料轉送的串連。用戶端的串連連接埠是發起該資料連線請求時使用的連接埠。當FTP客戶在防火牆之外訪問FTP伺服器時,需要使用被動傳輸模式。
3.單連接埠模式
除上述兩種模式之外,還有一種單連接埠模式。該模式的資料連線請求由FTP伺服器發起。使用該傳輸模式時,用戶端的控制串連連接埠和資料連線連接埠一致。因為這種模式無法在短時間連續輸入資料、傳輸命令,因此並不常用。
Linux下有很多可用的FTP伺服器,其中比較流行的有WU-FTP(Washington University FTP)和VSFTP。Red Hat 8.0中內建了WU-FTP和VSFTP兩個軟體。WU-FTP是一個著名的FTP伺服器軟體,它功能強大,能夠很好地運行於眾多Unix作業系統中。不過作為後起之秀的VSFTP越來越流行,在Red Hat 9.0發行版中就只帶有VSFTP。
VSFTP中VS的意思是“Very Secure”。從名稱可以看出,從一開始,軟體的編寫者就非常注重其安全性。除與生俱來的安全性外,VSFTP還具有高速、穩定的效能特點。在穩定性方面,VSFTP可以在單機(非叢集)上支援4000個以上的並發使用者同時串連。據ftp.redhat.com的資料,VSFTP最多可以支援15000個並發使用者。
快速構建FTP伺服器
FTP伺服器實現的準系統是上傳下載,下面就分幾個步驟來搭建一個可以實現下載功能的簡易FTP伺服器。
1.安裝FTP伺服器
如果在安裝系統時沒有選擇安裝FTP伺服器,可以通過Red Hat 9.0中的“添加/刪除應用程式”工具進行安裝。具體方法是,選擇“主選單”→“系統設定”→“添加/刪除應用程式”,在彈出的介面中選中FTP伺服器,單擊“更新”即可。
如果無法確認是否安裝了該軟體,可以使用以下命令查看:
#rpm -qa|grep vsftpdvsftpd-1.1.3-8 |
2.啟動FTP伺服器
套用Red Hat 9.0的預設範例直接啟動VSFTP。
# /sbin/service vsftpd start
為vsftpd啟動vsftpd: [確定]
3.在/var/ftp/pub目錄下建立一個名為test.txt的檔案,檔案內容為“This is a test file”。
4.測試
使用FTP用戶端登入到本機伺服器,然後以匿名身份(anonymous)登入:
# ftp 127.0.0.1Connected to 127.0.0.1 (127.0.0.1).220 (vsFTPd 1.1.3)Name (127.0.0.1:root): anonymous331 Please specify the password.Password:230 Login successful. Have fun.Remote system type is UNIX.Using binary mode to transfer files. |
這樣就成功地登入到FTP伺服器。可以顯示伺服器目錄列表如下:
ftp> ls227 Entering Passive Mode (127,0,0,1,63,15)150 Here comes the directory listing.drwxr-xr-x 2 0 0 4096 Dec 04 01:35 pub226 Directory send OK. |
切換到pub目錄下,並顯示目錄內容,可以找到剛才建立的檔案test.txt:
ftp> cd pub250 Directory successfully changed.ftp> ls227 Entering Passive Mode (127,0,0,1,232,34)150 Here comes the directory listing.-rw-r--r-- 1 0 0 21 Dec 04 01:35 test.txt226 Directory send OK. |
下載test.txt檔案:
ftp> mget test.txtmget test.txt? y227 Entering Passive Mode (127,0,0,1,186,210)150 Opening BINARY mode data connection for test.txt (21 bytes).226 File send OK.21 bytes received in 0.0108 secs (1.9 Kbytes/sec) |
查看本機目錄內容,可以看到test.txt已成功下載到本機。
ftp> !lsa EIO_Binders initrd mnt proc tftpboot ylg.txtbin etc lib mymnt root tmpboot home lost+found myshare sbin usrdev id_dsas.pub misc opt test.txt var |
嘗試上傳名為ylg.txt的檔案,可以看到請求被拒絕了。
ftp> put ylg.txtlocal: ylg.txt remote: ylg.txt227 Entering Passive Mode (127,0,0,1,243,10)550 Permission denied. |
退出登入:
由測試可以看出,已經可以下載檔案,但不能上傳檔案(也不能在伺服器上建立目錄和檔案)。實際上這是一個專門提供下載服務的匿名FTP伺服器。
從上面的步驟可以看出,並不需要做什麼配置就可以完成一個簡易FTP伺服器的架設。這是因為Red Hat已經配置好一個預設的FTP伺服器。不過在實際應用中,大部分情況下這個簡易的伺服器並不能滿足需求。