vsftpd是FTP協議的實現工具,是一個ftp服務器。
FTP協議基於TCP協議通信,且佔用兩個TCP端口,分爲兩個連接,分別爲命令連接和數據連接;
命令連接:即正常客戶端與服務器端簡歷連接,數據請求時建立的連接等。
數據連接:即數據傳輸時建立的連接。
FTP協議有兩種工作模式,分別爲主動模式和被動模式
主動模式:客戶端使用TCP隨機端口號發起請求到服務器端,而服務器端使用TCP21號端口相應並與之建立命令連接,然後服務器端使用TCP20號端口向客戶端發送數據傳輸請求的數據連接,客戶端使用命令連接所使用的隨機端口號+1的端口(如果+1被佔用,那就+2,以此類推)等待並相應服務器端。
被動模式:客戶端使用隨機端口發起請求到服務器端,服務器端使用TCP21號端口相應並與之建立命令連接,然後客戶端使用命令連接所使用的隨機端口號+1的端口(如果+1被佔用,那就+2,以此類推)發起數據傳輸請求到服務器端,服務器端使用TCP隨機端口號相應;之所以使用隨機端口,是爲了解決可能出現多個客戶端同時需要傳輸文件的需求。
注意:主動模式有一個弊端,如果客戶端上有防火牆存在,是不允許服務器主動發起請求到客戶端的,防火牆會視之爲掃描後***,會導致FTP傳輸的失敗,而被動模式不會有這種情況發生。
FTP數據都是流式化以後傳輸的,要麼是文本字節碼,要麼是二進制流
FTP協議是C/S架構
服務器端常用的程序:
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
這篇主要是筆記的整理,寫的比較潦草,如有遺漏錯誤和爭議之處,歡迎大家的批評指正和討論,謝謝。