文件服務器:FTP服務器
數據傳輸原理
功能簡介
-
文件的傳輸與管理
-
不同等級的用戶身份:user、guest、anonymous
- 實體用戶。權限較完整
- 匿名用戶。下載資源的能力
-
命令記錄與日志文件記錄
/var/log 里面可找到用戶曾經使用過的命令和傳輸的數據
使用的服務是syslogd -
限制用戶活動的目錄:(change root,簡稱:chroot)
用戶的工作范圍局限在用戶的主目錄下。ftp后顯示的就是根目錄就是用戶的主目錄。
工作流程和使用到的端口(以ftp默認的主動式連接為例)
-
兩個連接
- 命令通道
- 數據流通道
因為是TCP數據包,所以每次連接都需要經過三次握手
-
連接過程
- 建立命令通道的連接
客戶端隨機取一個大於1024的端口與ftp服務器的port 21端口實現連接,這個連接來對ftp服務器執行命令
- 通知ftp服務器端使用Active並告知連接的端口號
客戶端在需要數據的情況下,會告知服務器使用什么方式來連接,如果是主動式(Active)連接時,客戶端會先隨機啟用一個端口,且通過命令通道告知FTP服務器這兩個消息,並等待ftp服務器的連接
- FTP服務器主動向客戶端連接
ftp服務器通過命令了解到客戶端的需求之后,默認使用port 22向客戶端發起請求,經過三次握手,現在就可以開始傳輸數據了
備注:數據傳輸通道是在有數據傳輸行為的時候,才會建立的通道,並不是一開始就連接ftp服務器的時候就立刻建立起的通道
在主動連接的FTP服務器與客戶端之間具有防火牆
很多局域網絡都會使用防火牆的NAT功能
讓我們來梳理一下問題發生的過程吧!
-
用戶與服務器之間命令通道的建立
NAT會主動記錄由內部送往外部的連接信息,而由於命令通道的建立是由客戶端向服務器端發起的,故這條連接順利建立
-
用戶與服務器之間數據通道建立的通知
client啟動數據傳輸通道,並通過命令告知ftp服務器,等待服務器端的主動連接
-
服務器主動連到NAT等待轉遞至客戶端的連接問題
經過NAT轉換,服務器端只能得知NAT的IP而不是客戶端的IP。因此ftp服務器會以port 20主動向NAT發起port發起主動連接的請求。但NAT並沒有啟動port來監聽ftp服務器的連接
在ftp的主動式連接中,NAT將會被視為客戶端,但是NAT並不是客戶端,這就造成了問題。
如果你有時發現連接上服務器了,但是無法獲取文件名的列表,而是在超過一段時間后顯示“can’t build data connection:connection refused”,"無法進行數據傳輸"之類的信息,那就是這個原因困擾的。
簡易的解決辦法:
-
iptables提供的ftp檢測模塊
使用modprobe這個命令加載ip_conntrack_ftp及ip_nat_ftp等模塊,這幾個模塊會主動的分析目標是port 21的連接信息,就可以得到客戶端的數據傳輸通道的端口信息,就能接收服務器的連接了。
但是如果ftp服務器使用的不是默認端口21的話,那就無法順利解析了
-
客戶端選擇被動式(Passive)連接模式
主動式是服務器向客戶端發起連接,那被動式就是客戶端向服務器端發起連接。
客戶端選擇被動式的連接模式
-
用戶與服務器建立命令通道
-
客戶端發起PASV的連接請求
當使用數據通道命令時,客戶端可通過命令通道發出PASV的被動式連接要求,並等待服務器的回應
-
ftp服務器啟動數據端口,並通知客戶端連接
如果你所使用的ftp服務器是支持被動式連接的,那么就會啟動一個監聽端口,也可以自定義某一范圍的端口,這要看ftp服務器軟件而定。然后ftp服務器會通過命令通道告知客戶端已經啟動的端口(port PASV)
-
客戶端隨機取用大於1024的端口進行連接
客戶端隨機取用大於1024的端口來進行對ftp服務器的port PASV連接。
潛在問題:
-
被動式的ftp數據通道的連接方向是由客戶端向服務器端連接的。那么,如果ftp服務器也是在NAT后端怎么辦?
-
服務器在沒有設置的情況下隨機選取大於1024的端口來提供客戶端連接使用。但如果此端口有問題的話,怎么辦呢?很難追蹤來自入侵者攻擊的日志信息。 passive ports限制 port number
vsftpd服務器基礎設置
較為安全的ftp服務器軟件的特點
-
啟動者身份為一般用戶,對於Linux系統的權限較低,危害相對降低。此外,vsftpd利用chroot()函數進行改換根目錄的操作,使系統工具不被利用
-
任何需要具有較高執行權限的vsftpd命令均以一個特殊的上層程序所控制,該上層程序享有的較高執行權限能力已經被限制的相當低了
-
絕大部分的ftp命令已經被整合到vsftpd主程序中,不要使用額外的系統提供的命令,比較安全
-
較高執行權限的命令需經過相當程度的身份確認后,才可使用
所需軟件及軟件結構
-
軟件:vsftpd
-
配置文件:/etc/vsftpd/vsftpd.conf
參數=設置值
等號兩邊不能有空白 -
文件/etc/pam.d/vsftpd
主要作為身份認證使用,阻擋一些用戶身份的功能
-
文件/etc/vsftpd/ftpusers
系統賬號默認是無法使用vsftpd
限制某些用戶無法使用vsftpd -
文件/etc/vsftpd/user_list
不允許登陸vsftpd的賬號寫入這里,與ftpusers的作用相同
但是這個文件是否生效是由vsftpd.conf來決定(userlist_deny與userlist_enable = {YES/NO}) -
文件/etc/vsftpd/chroot_list
此文件默認不存在,需要手動建立。
功能:將某些賬號的用戶chroot建立在他們的默認用戶主目錄下。但是這個文件生效與vsftpd.conf內的chroot_list_enable、chroot_list_file兩個參數有關 -
文件/usr/sbin/vsftpd
vsftpd的主要執行文件。只有這一個執行文件
-
目錄/var/ftp
匿名用戶登陸的根目錄