vsftpd是FTP協議的實現工具,是一個ftp服務器。
mysql
FTP協議基於TCP協議通訊,且佔用兩個TCP端口,分爲兩個鏈接,分別爲命令鏈接和數據鏈接;sql
命令鏈接:即正常客戶端與服務器端簡歷鏈接,數據請求時創建的鏈接等。數據庫
數據鏈接:即數據傳輸時創建的鏈接。安全
FTP協議有兩種工做模式,分別爲主動模式和被動模式bash
主動模式:客戶端使用TCP隨機端口號發起請求到服務器端,而服務器端使用TCP21號端口相應並與之創建命令鏈接,而後服務器端使用TCP20號端口向客戶端發送數據傳輸請求的數據鏈接,客戶端使用命令鏈接所使用的隨機端口號+1的端口(若是+1被佔用,那就+2,以此類推)等待並相應服務器端。服務器
被動模式:客戶端使用隨機端口發起請求到服務器端,服務器端使用TCP21號端口相應並與之創建命令鏈接,而後客戶端使用命令鏈接所使用的隨機端口號+1的端口(若是+1被佔用,那就+2,以此類推)發起數據傳輸請求到服務器端,服務器端使用TCP隨機端口號相應;之因此使用隨機端口,是爲了解決可能出現多個客戶端同時須要傳輸文件的需求。架構
注意:主動模式有一個弊端,若是客戶端上有防火牆存在,是不容許服務器主動發起請求到客戶端的,防火牆會視之爲掃描後***,會致使FTP傳輸的失敗,而被動模式不會有這種狀況發生。併發
FTP數據都是流式化之後傳輸的,要麼是文本字節碼,要麼是二進制流框架
FTP協議是C/S架構ssh
服務器端經常使用的程序:
wu-ftp
proftpd
pureftp
vsftpd:Very Secure ftpd
IIS
ServU
客戶端經常使用的程序:
GUI,圖形界面程序
flashfxp
cuteftp
filezilla(開源)
gftp(Linux)
CLI,命令行程序
ftp
lftp
wget
lftpwget
用戶認證方式:
系統用戶
虛擬用戶
hash file,使用hash文件存儲用戶名及密碼
mysql,使用mysql數據庫存儲用戶名及密碼
匿名用戶
數據傳輸安全:
sftp:ssh提供的基於ssh協議的ftp
ftps:基於ssl的ftp
響應碼:
1xx:信息碼
2xx:成功狀態碼
3xx:進一步提示補全信息的狀態碼
4xx:客戶端錯誤
5xx:服務端錯誤
安裝vsftpd:
使用rpm包安裝便可
pam:Plugable Authentication Module,插件式認證模塊
nsswitch:名稱解析框架
模塊化:/lib64/libnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.conf
pam:認證框架,pam認證時都是基於配置文件認證的
模塊化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服務腳本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
主程序文件:/usr/sbin/vsftpd
數據文件:/var/ftp
配置文件的修改:/etc/vsftpd/vsftpd.conf
對於ftp訪問ftp服務時應該對其chroot,避免切換目錄後產生安全隱患
chroot_local_user={YES|NO} //YES即啓用禁錮用戶功能,使用戶登錄進入FTP目錄後,沒法切換目錄 chroot_list_enable={YES|NO} // 這個指令必須和chroot_list_file一塊兒啓用 // 不能上面的chroot_local_user同時啓用,由於上面的chroot_list_enable指令是禁錮全部用戶 chroot_list_file=/etc/vsftpd/chroot_list // chroot_list_file文件中的用戶名即爲指定的被禁錮的用戶,每行一個用戶名
匿名用戶的配置:
anonymous_enable=YES // 容許匿名用戶登錄 anonymous_upload_enable=YES // 容許匿名用戶上傳文件 anonymous_write_enable=YES // 容許匿名用戶刪除文件 anon_mkdir_write_enable=YES // 容許匿名用戶建立刪除目錄 注意:啓用寫入功能時,ftp用戶對相應的本地文件系統也要有相應的寫入權限;生效的權限取決於文件 系統權限和服務權限的交集;
banner信息的配置:
ftpd_banner=Welcome to blah FTP service. // 直接輸入banner信息 banner_file=/PATH/TO/BANNER_FILE // 定義banner信息文件 例:banner_file=/etc/vsftpd/banner,而後在banner文件中輸出banner信息便可 注意:ftpd_banner和banner_file指令不能同時開啓 dirmessage_enable=YES // 這個指令的做用是,用戶在訪問特定目錄時會彈出特定banner信息 // 在須要彈出banner信息的目錄下編輯一個.message文件便可 // 例如/var/ftp/.message
控制登錄用戶的機制:
/etc/vsftpd/ftpusers中的用戶都不容許使用ftp服務,這是在/etc/pam.d/vsftpd文件中定義的,一行一個用戶
/etc/vsftpd/userlist文件:
黑名單:默認即爲黑名單
在/etc/vsftpd/vsftpd.conf中修改 userlist_enable=YES // 啓用userlist文件 userlist_deny=YES // 拒絕此文件中的用戶
白名單:
在/etc/vsftpd/vsftpd.conf中修改 userlist_enable=YES // 啓用userlist文件 userlist_deny=NO // 容許此文件中的用戶訪問ftp服務
注意:/etc/vsftpd/ftpusers是黑名單,/etc/vsftpd/userlist若是設置爲白名單,若是這時候黑名單和白名單中存在同一個用戶,那麼拒絕優先
鏈接限制:
max_clients= // 最大併發鏈接數 max_per_ip= // 每IP可同時發起的併發請求
速率限制:
anon_max_rate= // 匿名用戶的最大傳輸速率,單位是「字節/秒」 local_max_rate= // 本地用戶的最大傳輸速率,單位是「字節/秒」
上傳文件的umask:用於限制上傳的文件的權限
anon_umask= // 匿名用戶上傳文件的umask; local_umask= // 本地用戶上傳文件的umask;
修改匿名用戶上傳文件的屬主和屬組:
chown_uploads=YES chown_username=someuser // 全部匿名用戶上傳的文件的屬主和屬組都會改變成chown_username所指定的用戶名
虛擬用戶:
全部的虛擬用戶都會被映射爲一個系統用戶,訪問時的文件目錄是爲此係統用戶的家目錄;
虛擬用戶的用戶名和密碼存儲方式:
hash編碼的文件:
奇數行爲用戶名,偶數行爲密碼
關係型數據庫:
vsftpd的用戶認證支持從關係型數據庫中讀取用戶名和密碼,由於vsftpd的認證機制由pam進行管理,因此只要pam支持關係型數據庫就能夠。
pam-mysql實現認證
因爲pam不支持mysql認證,因此此處的pam-mysql模塊是第三方模塊,使得pam支持
傳輸日誌:
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log
這篇主要是筆記的整理,寫的比較潦草,若有遺漏錯誤和爭議之處,歡迎你們的批評指正和討論,謝謝。