18.FTPServer

FTP服務器的模式

FTP服務器工作端口

  • TCP21 命令傳輸端口
  • TCP20 數據傳輸端口

主動模式

FTP主動模式聯機示意圖

如上圖所示,FTP服務器在主動模式下,聯機步驟如下:

1,建立命令信號通道
客戶機會隨機選取大於1024以上的端口(port AA)來與FTP服務器的21端口連接,這個過程需要TCP的三次握手建立可靠的連接,建立連接後,客戶機會對服務器進行命令的下達。
2,協商階段
客戶機通知FTP服務器使用主動模式(active)進行數據的傳輸,並且會告知服務器,自己採用的數據傳輸的端口號。
3,傳輸數據階段
此時,FTP服務器由命令通道知道了客戶機的數據傳輸請求後,且知道了客戶機的數據傳輸端口;服務 器會主動向客戶機的數據傳輸端口建立鏈接請求,這個時候也會用TCP的三次握手!建立連接後,此時,客戶機和服務器共會建立兩天可靠的TCP連接,在命令信道進行下載或上傳的指令,在數據信道進行實際的數據傳輸。
注: 一句話總結,主動模式是,服務器端主動發出數據連接請求,客戶端等待服務器的主動連接。
被動模式

被動模式主要使用與客戶端有防火牆的情況下,如下圖中,服務器當主動和客戶機進行數據連接請求時,會被客戶端的防火牆阻止。

由上圖可知,由於有防火牆的存在或透過 NAT 的轉換後,FTP 服務器只能得知 NAT 的 IP 而不是客戶端的 IP , 因此 FTP 服務器會以 port 20 主動的向 NAT 的 port BB 發送主動聯機的要求。 但你的 NAT 並沒有啓動 port BB 來監聽 FTP 服務器的聯機啊!因此,不能順利建立數據連接。

解決以上的問題有兩種方式
1. 使用iptables的兩個模塊,你可以用modprobe這個命令來加載 ip_conntrack_ftp和ip_nat_ftp模塊來實現,條件是FTP服務器必須使用標準的21端口
2. 使用FTP的被動模式,如下圖

具體的過程是這樣的:

1.客戶機和服務器建立命令通道
這和之前主動模式是一樣的

2. 協商連接模式
這時客戶機會使用建立好的命令信道,向服務器發出PASV的被動模式連接要求,並等待服務器的迴應。此時客戶機並沒有告知服務器自己的數據傳輸端口,只是個請求

3. 當服務器接收到要求被動模式的連接時,且服務器支持此模式;就會先啓動一個大於1024的端口號進入監聽狀態。這個號碼也可以通過自己FTP服務器設定一個範圍。之後服務器會透過命令信道,告知客戶端自己已經啓動的數據傳輸端口,並等待客戶機的連接

4. 這時,客戶機知道了服務器端的數據連接端口後,會隨機用一個大於1024的端口號來和服務器的數據端口號進行連接。此時一切OK的話,就可傳輸數據。
注:一句話總結,被動模式是服務器端先開啓一個數據端口進行監聽,等待客戶機的連接。而客戶機會主動向服務器進行連接。

安裝

安裝服務端軟件

yum install   vsftpd

服務管理

啓動服務

systemctl  restart  vsftpd

查看監聽端口

 ss    -ntal

輸入中應該有 21 號端口被監聽
LISTEN      0      32      *:21                  *:*

配置文件 /etc/vsftpd/vsftpd.conf

port_enable=YES|NO
如果你要在數據連接時取消PORT模式時,設此選項爲NO。默認值爲YES。

connect_from_port_20=YES|NO
控制以PORT模式進行數據傳輸時是否使用20端口(ftp-data)。YES使用,NO不使用。
默認值爲NO,但RHEL 自帶的vsftpd.conf文件中此參數設爲YES。 

ftp_data_port=port number
設定ftp數據傳輸端口值(ftp-data)。默認值爲20。此參數用於PORT FTP模式。

port_promiscuous=YES|NO
默認值爲NO。爲YES時,取消PORT安全檢查。該檢查確保外出的數據只能連接到客戶端上。

pasv_enable=YES|NO 
YES,允許數據傳輸時使用PASV模式。NO,不允許使用PASV模式。默認值爲YES。 

pasv_min_port=port number
設定在PASV模式下,建立數據傳輸所可以使用port範圍的下界和上界,0 表示任意。默認值爲0。

pasv_max_port=port number 
把端口範圍設在比較高的一段範圍內,比如50000-60000,將有助於安全性的提高。
 
pasv_promiscuous=YES|NO
此選項激活時,將關閉PASV模式的安全檢查。該檢查確保數據連接和控制連接是來自同一個IP地址。小心打開此選項。此選項唯一合理的用法是存在於由安全隧道方案構成的組織中。默認值爲NO。
 
 pasv_address=
此選項爲一個數字IP地址,作爲PASV命令的響應。默認值爲none,即地址是從呼入的連接套接字(incoming connectd socket)中獲取  

三、FTP服務器的用戶分類
匿名用戶 (anonymous或ftp)
本地用戶(local user)
虛擬用戶(guest) use_localtime=YES //使用本地主機的時間,建議設置

1. 匿名用戶的配置選項

anonymous_enable=YES|NO  
控制是否允許匿名用戶登錄,YES允許,NO不允許,默認值爲YES。
 
 ftp_username=   
匿名用戶所使用的系統用戶名。默認下,此參數在配置文件中不出現,值爲ftp
 
no_anon_password=YES|NO  
控制匿名用戶登入時是否需要密碼,YES不需要,NO需要。默認值爲NO。

 deny_email_enable=YES|NO  
此參數默認值爲NO。當值爲YES時,拒絕使用banned_email_file參數指定文件中所列出的e-mail地址進行登錄的匿名用戶。
即,當匿名用戶使用 banned_email_file 文件中所列出的e-mail進行登錄時,被拒絕。
顯然,這對於阻擊某些Dos攻擊有效。當此參數生效時,需追加banned_email_file參數 

 banned_email_file=/etc/vsftpd.banned_emails   
指定包含被拒絕的e-mail地址的文件,默認文件爲/etc/vsftpd.banned_emails。 

 anon_root=
設定匿名用戶的根目錄,即匿名用戶登入後,被定位到此目錄下。主配置文件中默認無此項,默認值爲/var/ftp/。

anon_world_readable_only=YES|NO   
控制是否只允許匿名用戶下載可閱讀文檔。YES,只允許匿名用戶下載可閱讀的文件。NO,允許匿名用戶瀏覽整個服務器的文件系統。默認值爲YES。 
 
anon_upload_enable=YES|NO  
控制是否允許匿名用戶上傳文件,YES允許,NO不允許,默認是不設值,即爲NO。
除了這個參數外,匿名用戶要能上傳文件,還需要兩條件:
一、write_enable=YES;
二、在文件系統上,目錄有寫權限。 


 anon_mkdir_write_enable=YES|NO   
 控制是否允許匿名用戶創建新目錄,YES允許,NO不允許,默認是不設值,即爲NO。當然在文件系統上,FTP匿名用戶必需對新目錄的上層目錄擁有寫權限。 • 如果要設定爲 YES, 那麼 anony_other_write_enable 必須設定爲 YES

anon_other_write_enable=YES|NO 
控制匿名用戶是否擁有除了上傳和新建目錄之外的其他權限,如刪除、更名等。YES擁有,NO不擁有,默認值爲NO。

chown_uploads=YES|NO   
是否修改匿名用戶所上傳文件的所屬主。YES,匿名用戶所上傳的文件的所有權將改爲另外一個不同的用戶所有,用戶由chown_username參數指定。此選項默認值爲NO 
  
chown_username=whoever   
指定擁有匿名用戶所上傳文件的所屬主的用戶。此參數與chown_uploads一起用。不推薦使用root用戶。 

2.本地用戶配置選項

local_enable=YES|NO   
控制服務器的本地用戶是否可以登錄vsftpd。默認值爲YES。

local_root=   
定義所有本地用戶的根目錄。當本地用戶登入時,將被更換到此目錄下。默認值爲無此配置語句。

user_config_dir=   
定義用戶個人配置文件所在的目錄。用戶的個人配置文件爲該目錄下的同名文件。個人配置文件的格式與vsftpd.conf格式相同。
例如定義user_config_dir=/etc/vsftpd/userconf,並且主機上有用戶zenxiaoxian,那我們可以在user_config_dir的目錄新增名爲zenxiaoxian的文件。當用戶zenxiaoxian登入時,VSFTPD則會讀取user_config_dir下zenxiaoxian這個文件中的設定值,應用於用戶zenxiaoxian。默認值爲無 

3.虛擬用戶配置選項

虛擬用戶就是可以使用一個 Linux 系統中不存在的用戶。
讓這個虛擬用戶使用 ftp

guest_enable=YES|NO   
若是啓動這項功能,所有的非匿名登入者都視爲guest。默認值爲關閉。 
 
guest_username= 
定義VSFTPD的虛擬用戶在系統中所映射的本地用戶名。默認值爲ftp。  

4.用戶的登陸控制

pam_service_name=vsftpd
指出VSFTPD進行PAM認證時所使用的PAM配置文件名,默認值是vsftpd,默認PAM配置文件是  /etc/pam.d/vsftpd。 

/etc/vsftpd/ftpusers
VSFTPD禁止列在此文件中的用戶登錄FTP服務器。這個機制是在/etc/pam.d/vsftpd中默認設置的。

userlist_enable=YES|NO   
此選項爲YES時,VSFTPD將讀取userlist_file參數所指定的文件中的用戶列表。當列表中的用戶登錄FTP服務器時,該用戶在提示輸入密碼之前就被禁止了。即該用戶名輸入後,VSFTPD查到該用戶名在列表,VSFTPD就直接禁止掉該用戶,不會再進行詢問密碼等後續步聚。默認值爲NO。 

userlist_file=/etc/vsftpd/user_list
指出userlist_enable選項生效後,被讀取的包含用戶列表的文件。默認值是/etc/vsftpd/user_list。

userlist_deny=YES|NO   
決定禁止還是隻允許由userlist_file指定文件中的用戶登錄FTP服務器。此選項在userlist_enable 選項啓動後才生效。YES,默認值,禁止文件中的用戶登錄,同時也不向這些用戶發出輸入口令的提示。NO,只允許在文件中的用戶登錄FTP服務器。 

tcp_wrappers=YES|NO
在VSFTPD中使用TCP_Wrappers遠程訪問控制機制,默認值爲YES 

5.用戶的目錄訪問控制

chroot_list_enable=YES|NO  
鎖定某些用戶在自家目錄中。即當這些用戶登錄後,不可以轉到系統的其他目錄,只能在自家目錄(及其子目錄)下。具體的用戶在chroot_list_file參數所指定的文件中列出。默認值爲 註釋。   

chroot_list_file=/etc/vsftpd/chroot_list  
指出被鎖定在自家目錄中的用戶的列表文件。文件格式爲一行一用戶。
通常該文件是/etc/vsftpd/chroot_list。此選項默認不設置。  

chroot_local_users=YES|NO  
將本地用戶鎖定在自家目錄中。
當此項被激活時,chroot_list_enable=YES參數的作用將發生變化,chroot_list_file所指定文件中的用戶將不被鎖定在自家目錄。本參數被激活後,可能帶來安全上的衝突 

passwd_chroot_enable   
當此選項激活時,與chroot_local_user選項配合,chroot()容器的位置可以在每個用戶的基礎上指定。每個用戶的容器來源於/etc/passwd中每個用戶的自家目錄字段。默認值爲NO  

tcp_wrappers=YES
支持 TCP Wrappers 的防火牆機制

客戶端操作

安裝客戶軟件

yum install -y lftp

連接到 FTP Server

lftp 172.18.0.2 
# lftp   FTP Server 的 ip

基本操作

查看

lftp 172.18.0.2:/> ls
-rw-r--r--    1 0        0            4707 Jul 29 11:03 an.cfg
drwxr-xr-x    2 0        0            4096 Jul 29 11:13 pub

執行 shell 命令

lftp 172.18.0.2:/> !ls

下載單一文件

lftp 172.18.0.2:/> get an.cfg
4707 bytes transferred

下載目錄

lftp 172.18.0.2:/> mirror pub
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章