FTP:文件傳輸協議
兩類連接:
命令連接:傳輸命令
數據連接:傳輸數據
端口號 TCP 20/21
工作方式:
主動模式:
21端口--控制端口
20端口--數據端口
描述:
當客戶端與FTP服務器建立連接時客戶端會輸入賬戶和密碼,當輸入正確后,FTP服務器會用21端口返回給客戶端一條登錄成功的信息。客戶端登錄成功后會進行數據傳輸(連接成功后,客戶端開始監聽服務器20端口),此時客戶端會產生一隨機端口號通過FTP服務器21端口進行數據傳輸,當21端口收到數據流后會連接到FTP服務器20端口將相關數據流傳輸給客戶端的隨機端口,實現雙方的數據傳輸。
被動模式:
21端口+隨機端口
描述:
同樣當客戶機登錄成功后,客戶端會打開兩個隨機端口,第一個端口連接到FTP服務器21端口,此時客戶端發送PASV命令,不允許FTP服務器21端口連接20端口,這樣FTP服務器會使用隨機端口號回應客戶端PASV應答。此時客戶端會使用第二個隨機端口號來監聽服務器傳輸來的數據。
路徑映射:
用戶家目錄:每個用戶的URL的/映射到當前用戶的家目錄
vsftpd以ftp用戶的身份運行進程,默認認用戶即為ftp用戶,匿名用戶的默認路徑即ftp用戶的家目錄/var/ftp
程序環境:
主程序:/usr/sbin/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
數據根目錄:/var/ftp
系統模塊文件:/usr/lib/systemd/system/vsftpd.service
配置vsftpd:
ftp用戶:
匿名用戶:
虛擬用戶:非系統用戶,用戶賬號非為可登陸操作系統的用戶賬號
系統用戶:至少禁止系統用戶訪問ftp服務,/etc/vsftpd/ftpusers, PAM (/etc/pam.d/vsftpd)
用戶通過vsftpd服務訪問到默認路徑,是用戶自己的家目錄;默認可以自己有權限訪問的所有路徑切換
配置文件:
/etc/vsftpd/vsftpd.conf
匿名用戶:
anonymous_enablen=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
系統用戶:
local_enable=YES
write_enable=YES
local_umask=022
輔助配置文件/etc/vsftpd/ftpusers
列在此文件中的用戶 均禁止使用ftp服務
chroot_local_user=YES
本地用戶在訪問時只能訪問自己的家目錄
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
禁據列表中文件存在的用戶於其家目錄中 ;需要事先去除用戶對家目錄的寫權限
傳輸日志:
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
守護進程的類型:
standalone :獨立守護進程;由服務進程自行監聽套按字.並接收用戶訪問請求
translent :瞬時守護進程;由受托管方代為監聽套按字,服務進程沒有訪問請求時不啟動;當托管方收到訪問請求時才啟動服務進程
Centos 6 : xinetd獨立守護進程/etc/xinetd.d/
Centos 7 :由systemd代為監聽
控制可登陸vsftpd服務的用戶列表:
userlist_enable=YES
啟用/etc/vsftpd/user_list文件來控制可登錄用戶
userlist_deny=
YES:意味着此為黑名單
NO:白名單
上傳下載速率:
anon_max-rate=0
local_max_rate=0
並發連接數限制:
max_clients=2000
max_per_ip=50
測試:
配置本地用戶上傳和下載
(1)vsftpd可以直接使用Linux系統的本地用戶作為FTP用戶
使用本地用戶登錄FTP服務器后,默認將位於用戶自己的主目錄中,且具有讀寫權限
如利用qwertyuiop用戶訪問ftp,那么默認將進入到的目錄是/home/qwertyuiop
創建系統用戶,並設置密碼,並在主目錄中放置一個測試文件:
useradd ftptest
passwd vsftpdtest
echo ‘ftp test’ > /home/ftptest/ftptest.txt
創建系統用戶test,並設置密碼:
useradd qwertyuiop
passwd qwertyuiop
(2)允許用戶ftptest登錄,且登錄成功后位於自己的家目錄中。不允許qwertyuiop用戶登陸
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user =YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
local_umask=022
userlist_enable=YES
userlist_deny=NO
將ftptest用戶加入到 /etc/vsftpd/user_list文件。
(3)允許qwertyuiop用戶登錄,登錄成功后位於/data目錄,禁止ftptest用戶登錄
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user =YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
local_umask=022
userlist_enable=YES
userlist_deny=NO
local_root=/data
將qwertyuiop用戶加入到 /etc/vsftpd/user_list文件。從此文件中刪除ftptest用戶
注:每次測試必須重新啟動服務