一、FTP服務概述:
FTP:(File Transfer Protocol,文件傳輸協議)是典型的C/S結構的應用層網絡協議。需要相應的客戶端和服務器端軟件才能進行文件傳輸。
1、FTP連接及傳輸模式
FTP服務器默認使用TCP協議的20、21端口與客戶端進行通信。21端口用於建立控制連接,並傳輸FTP控制命令;20端口用於建立數據連接,並傳輸文件數據。
根據FTP服務器在建立數據連接過程中的主、被動關係,FTP數據連接分爲:主動模式和被動模式。
兩者區別如下:
主動模式:
首先客戶段向連接服務器21端口建立FTP控制連接,當需要傳輸數據時,客戶端以PORT(主動)命令告知服務器“我打開了某某端口,你來連接我”,於是服務器從20端口向客戶端的該端口發送請求並建立數據連接。
被動模式:
如果客戶機所在網絡的防火通常牆禁止主動模式連接,通常會使用被動模式。首先由客戶端向服務器端的21端口建立FTP控制連接,當需要傳輸數據時,服務器以PASV(被動)命令告知客戶端“我打開了某端口,你過來連接”,於是客戶端向服務器該端口(非20)發送請求並建立數據連接。
傳輸模式:
假設客戶端與服務器建立好數據連接以後,就可以根據從控制連接中發送的FTP命令,上傳和下載文件了,在傳輸文件時,根據是否進行字符轉換,分爲文件模式和二進制模式。
文本模式:又稱爲ASCII模式,這種模式在傳輸文件時使用ASCII字符序列,一般只用於純文本文件傳輸。
二進制模式:又稱爲Binary模式,這種模式不會轉換文件中的字符序列,更適合傳輸程序、圖片等文件。
說明:使用二進制模式比文本模式更有效率,大多數FTP客戶端工具可以根據文件類型自動選擇文件傳輸模式,而無需用戶手工指定。
2、FTP用戶類型
匿名用戶:其用戶名爲anonymous和ftp,提供任意密碼(包括空密碼)都可以通過服務器驗證,這樣的用戶稱之爲“匿名用戶”。匿名用戶一般用於提供公共文件的下載,如一些提供免費軟件、學習資料下載的站點。
本地用戶:就是以真實的用戶名和密碼進行登錄,但前提條件是用戶在FTP服務器上擁有自己的帳號.用真實帳號登錄後,其登錄的目錄爲用戶自己的目錄,該目錄在系統建立帳號時系統就自動創建.
虛擬用戶:FTP服務器軟件可以維護一份獨立的用戶數據庫文件,而不是直接使用本地用戶賬號。這些位於獨立數據庫文件中的FTP用戶賬號,通常稱爲“虛擬用戶”,使用FTP虛擬用戶可以提供更好的安全性。
3、FTP服務器軟件的種類
Wu-ftpd服務器是早期較爲流行的FTP服務器程序之一,功能強大且穩定性也較出色。但是安全性比Proftpd和vsftpd要差一些。
Proftpd服務器在Wu-ftpd的基礎上進行改進,配置起來也相對比較容易,執行效率和安全性方面也得到很大的提高。
vsftpd服務器主要基於安全性進行改進,vsftpd在速度和穩定性方面的表現也很突出。vsftpd可以支持15000個用戶併發連接。
注:本文主要介紹的Vsftpd軟件
4、FTP客戶端軟件
Windows平臺:CuteFTP、FlashFXP、LeapFTP、Filezilla等
Linux平臺:gftp、kuftp等
二、FTP服務基礎知識
在redhat5系統中,安裝vsftpd軟件,下面由redhat5上安裝vsftpd,介紹相關內容。
vsftpd服務的配置文件默認位於:/etc/vsftpd/文件夾中,主要包括用戶控制列表文件(ftpusers、user_list)和主配置文件(vsftpd.conf)。
1、用戶控制列表文件ftpusers和user_list
ftpusers和user_list文件中均包含一份FTP用戶名的列表,兩個文件雖然都用於FTP用戶控制,但是之間存在一些差別。
ftpusers文件:(就像黑名單),該文件中包含的用戶賬號將禁止登錄vsftpd服務器,不管該用戶是否存在user_list文件中出現。通常將root、bin、daemon等特殊用戶列在改文件中,禁止用戶登錄FTP服務。
user_list文件:該文件中包含的用戶賬號可能被禁止登錄,也可能被允許登錄,具體在主配置文件vsftpd.conf中決定。當存在"userlist_enable=YES"的配置項時,user_list文件生效,如果配置"userlist_deny=YES",則禁止列表中的用戶賬號登錄,如果配置"userlist_deny=NO",則僅允許列表中的用戶賬號登錄。
2、主配置文件/etc/vsftpd/vsftpd.conf
在vsftpd主配置文件中,配置行採用“配置項=參數”的格式。下面列出vsftpd.conf文件中常見配置項:
作用範圍 | 配置項及示例 | 含義說明 |
匿名用戶 | anonymous_enable=YES | 是否允許匿名訪問 |
anon_umask=022 | 設置匿名用戶所上傳的默認權限 | |
anon_root=/var/ftp | 設置匿名用戶FTP根目錄(缺省爲/var/ftp/) | |
anon_upload_enable=YES | 是否允許匿名用戶上傳文件 | |
anon_mkdir_write_enable=YES | 是否允許匿名用戶有創建目錄的寫權限 | |
anon_other_write_enable=YES | 是否允許匿名用戶有其他寫入權限。如對文件改名、覆蓋及刪除文件 | |
anon_max_rate=0 | 限制匿名用戶的最大傳輸速率(0位無限制)單位爲字節 | |
本地用戶 | local_enable=YES | 是否允許本地系統用戶訪問 |
local_umask=022 | 設置本地用戶所上傳文件的默認權限掩碼值 | |
local_root=/var/ftp | 設置本地用戶的FTP根目錄(缺省爲用戶的宿主目錄) | |
chroot_local_user=YES | 是否將FTP本地用戶禁錮在宿主目錄中 | |
local_max_rate=0 | 限制本地用戶最大傳輸速率(0爲無限制),單位爲字節 | |
全局配置 | listen=YES | 是否以獨立運行的方式監聽服務 |
listen_port=21 | 設置監聽FTP服務的端口號 | |
write_enable=YES | 啓用任何形式的寫入權限(如上傳、刪除文件等)都需要開啓此項 | |
download_enable=YES | 是否允許下載文件(建立僅限於瀏覽、上傳的FTP服務時可將其設爲NO) | |
dirmessage_enable=YES | 用戶切換進入目錄時顯示.message文件(如果存在)的內容 | |
xferlog_enable=YES | 啓用xferlog日誌,默認記錄到/var/log/xferlog文件 | |
xferlog_std_format=YES | 啓用標準的xferlog日誌格式,若禁用此項,將使用vsftpd自己的日誌格式 | |
connect_from_port_20=YES | 允許服務器主動模式(從20端口建立數據連接) | |
pasv_enable=YES | 允許被動模式連接 | |
pasv_max_port=24600 | 設置用於被動模式的服務器最大端口號 | |
pasv_min_port=24500 | 設置用於被動模式的服務器最小端口號 | |
pam_service_name=vsftpd | 設置用於用戶認證的PAM文件位置(/etc/pam.d/目錄中對應的文件路徑) | |
userlist_enable=YES | 是否啓用user_list用戶列表文件 | |
userlist_deny=YES | 是否禁止user_list列表文件中的用戶賬號 | |
max_client=0 | 最多允許多個客戶端同時連接(0無限制) | |
max_per_ip=0 | 對來自相同IP地址的客戶端,最多允許多少個併發連接(0爲無限制) | |
tcp_wrappers=YES | 是否啓用TCP_Wrappers主機訪問控制 |
說明:關於vsftpd文件中的更多配置選項,使用man vsftpd.conf查看幫助。