vsftpd簡析

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


這篇主要是筆記的整理,寫的比較潦草,如有遺漏錯誤和爭議之處,歡迎大家的批評指正和討論,謝謝。

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