===============================基礎篇===========================
ftp是工作在應用程的檔案傳輸協定,基于c/s架構的,能夠實作跨平台跨主機間檔案共享,是以ftp被廣泛應用在衆多環境中。
ftp的連結放式:
指令連結:
監聽在tcp的21号端口,是由用戶端連結到伺服器端,向伺服器端發起指令的連接配接方式。
資料連接配接:
主動模式:
在此模式下,首先用戶端打開了一個随機端口(比如2227),向伺服器端發送請求,伺服器端通過自己的21号固定端口響應用戶端,如果要傳輸資料的話,伺服器端會再打開20号端口,主動去連結用戶端的随機端口加1的端口(2228),若用戶端這個端口被占用,伺服器端則去連結2229端口,以此類推,直到建立連接配接,完成資料傳輸。
被動模式:
在此模式下,需要資料傳輸的時候,是需要用戶端主動聯系伺服器端的,即:用戶端通過一個随機端口(比如2227)去聯系伺服器,伺服器端通過21号端口回應用戶端,當需要進行資料傳輸的時候,伺服器端不再使用20号端口去主動聯系用戶端,而是打開一個随機端口(比如6666)等待用戶端來請求,這個随機端口,伺服器端會在響應用戶端的時候發送一串數字(比如172.16.6.11,113,26),用戶端這時候通過自己的2228端口去聯系伺服器端打開的随機端口(113*256+26),進行資料傳輸,如果有别的用戶端也需要資料傳輸,伺服器端就會再打開一個随機端口,并以同樣的方式,告訴用戶端端口号,進行資料傳輸。
注:在進行資料傳輸的時候,是由用戶端來決定是使用被動模式,還是主動模式
資料傳輸模式:
二進制、文本
ftp的實作:
伺服器端:
linux:wuftpd(所有服務采用一個程序), proftpd, pureftp, vsftpd(very secure紅帽自帶的ftp), filezilla
windows:serv-u, iis
用戶端:
linux:
ftp, lftp, gftp(linux), filezilla,
windows:
flashfxp, cuteftp, leapftp
注:由于ftp協定出現的非常早,那時候還沒有網絡安全的概念,是以沒有考慮到安全的因素,是以ftp是非常不安全的,盡可以實作在有限範圍内進行資料共享的服務
ftp的安裝(利用rpm包的方式)
伺服器端:yum -y install vsftp
啟動服務:service vsftp start
用戶端:
yum -y install ftp //ftp不支援指令補全
yum -y install lftp //支援指令補全
協義響應碼:
1xx: 伺服器資訊
2xx: 正确響應資訊
3xx: 正常響應,某操作過程尚未完成,需進一步補充完成;
4xx: 用戶端錯誤;比如說某用戶端請求了一個伺服器不錯在的資源,這是由于用戶端請求的錯誤資源導緻的。
5xx: 伺服器端錯誤; 伺服器自身問題導緻程式無法運作
注:ftp伺服器端檔案路徑是匿名使用者家的目錄。
vsftpd的使用者類型:
匿名使用者: 事實上是伺服器端自動映射的一個系統使用者;預設為anonymous
本地使用者:/etc/passwd中的使用者
預設root和id号小于500的使用者都禁止通路ftp;
虛拟使用者:事實上是伺服器端自動映射的一個系統使用者;
多個虛拟使用者同時被映射為同一個系統使用者,但不同的虛拟使用者可以具有不同的通路權限;
vsftpd:(伺服器端)
vsftpd的工作特性:
匿名使用者怎麼在lftp具有特殊權限
編寫/etc/vsftpd 裡邊添加
anon_other_write_enable=yes 删除檔案
anon_upload_enable=yes 上傳檔案
anon_mkdir_write_enable=yes 在lftp上具有建立目錄的權限
要想在上傳之後顯示一個資訊在/var/ftp 的一個子目錄下,建立.message 隐藏檔案
把想要輸出的内容添加進去
xferlog_enable=yes 開啟日志記錄内容
xferlog_file=/var/log/xferlog 日志記錄的位置
chroot: 禁锢使用者于其家目錄中,實作方式有兩種:
1、禁锢所有使用者:
chroot_local_user=yes
2、禁锢指定使用者,黑名單
chroot_list_enable=yes 啟動禁锢指定使用者功能
chroot_list_file=/etc/vsftpd/chroot_list 編寫禁锢使用者功能 一行一個使用者
3、不禁锢指定使用者,白名單,寫到檔案裡邊的不禁锢,沒寫在裡邊禁锢
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd/chroot_list
user_list:ftp使用者登陸白名單和黑名單:控制登陸的
1、白名單:
名單在/etc/vsftpd/user_list
userlist_enable=yes
在上邊一句的下邊添加
userlist_deny=no
2、黑名單:
userlist_deny=yes
這樣匿名使用者也被限制了,把匿名使用者寫在名單裡
傳輸速率限定,預設機關為位元組:
匿名用的最大傳輸速率
anon_max_rate=
本地使用者的最大傳輸速率
local_max_rate=
限制每個使用者的傳輸速錄,
使用user_config_dir=目錄,在指定的目錄下為使用者建立一個同名的檔案
在裡邊寫上local_max_rate=
例:限制tom的傳輸速率
1、在/etc/vsftpd/userconfs/下建立一個名為tom的目錄
user_config_dir=/etc/vsftpd/userconfs/tom
2、echo “local_max_rate= num” >> /etc/vsftpd/userconfs/tom
連接配接數限定:
max_clients=100
max_per_ip=2
基于ssl控制使用者登陸
1、自建一個ca
之前筆者在寫openssl的時候已經自建了ca這裡就不再示範了
2、給vsftpd生成私鑰
2、制作證書申請
3、簽署證書:
lftp要想使用ssl 把下面的内容添加到/etc/vsftpd.conf的最後即可
在伺服器上執行:抓包工具
# tcpdump -i eth0 -xx port 21