ftp&vsftpd詳解


1. ftp簡介

1.1 文件傳輸協議

  • File Transfer Protocol,文件傳輸協議
    • C/S架構
    • ftp是明文傳輸

1.2 兩路ftp連接

  • 當傳輸數據時,會新建立一個連接,而非使用此前建立的命令連接。
    • 命令連接:傳輸命令
    • 數據連接:傳輸數據

1.3 文本模式&二進制模式

  • 文本模式:
    • 文本傳輸是使用ASCII字符,並由回車鍵和換行符分開,二進制不用轉換或格式化就可以傳輸字符
    • 二進制模式比文本模式更快,並且可以傳輸所有ASCII值,所以一般將FTP設置成二進制模式
  • 二進制模式:
    • 二進制模式用來傳輸可執行文件、壓縮文件、圖片文件
    • 如果用ASCII模式傳送,會顯示一堆亂碼,必須重新用BINARY模式傳
    • 注意:用HTML和文本編寫的文件必須用ASCII模式上傳,用BINARY模式上傳會破壞文件,導致文件執行出錯

2. ftp的兩種工作模式

2.1 主動模式(PORT)

1)工作圖示&分析

  • FTP客戶端通過向FTP服務器端發送PORT命令,告訴服務器該客戶端傳輸數據的臨時端口
  • 當需要傳送數據時,服務器通過TCP的20端口與客戶端的臨時端口建立數據傳輸通道,完成數據傳輸
  • 在建立連接的過程中,由服務器主動發起連接,因此被稱為主動方式

2)工作原理

  • Server:20/tcp端口連接客戶端命令連接使用的向后的第一個可用端口
  • 客戶端在一個隨機端口上向服務端的21/tcp端口發起請求,服務端響應后,連接成功
  • 客戶端向服務端發起一個GET請求后,服務端便會通過自己的20/tcp端口,向客戶端之前的那個隨機端口+1的端口傳輸數據,如果隨機端口+1的端口被其他程序占用,那么會使用再次+1的端口,以此類推,直到找到一個合適的端口
  • 傳輸完畢后發送數據的一方主動關閉數據連接

2.2 被動模式(PASV)

1)工作圖示&分析

  • FTP客戶端通過向FTP服務器端發送PASV命令,告訴服務器進入被動模式,服務器選擇臨時端口並告知客戶端
  • 當需要傳送數據時,客戶端主動與服務器的臨時端口號建立數據傳輸通道,完成數據傳輸
  • 在整個過程中,由於服務器總是被動接收客戶端的數據連接,因此被稱為被動方式

2)工作原理

  • Server:打開一個隨機端口,並等待客戶端連接
  • 客戶端在一個隨機端口上向服務端的21/tcp端口發起請求后,服務端會進行響應
    • 告訴客戶端這里已經開放了某個端口,可以連接了
    • 服務端響應時不會直接發送端口號,而是會發送兩個數字,如173,26,(表示打開的端口除以256所得到的商和余數,這里表示44314)
  • 客戶端收到服務端的端口后,就連接服務端的端口進行數據傳輸

3. vsftp詳解

3.1 vsftp概述

1)概述

  • vsftp是安全的FTP程序
  • URL的格式
    • SCHEME://username:password@HOST:PORT/path/to/file
  • 路徑映射
    • 用戶家目錄:每個用戶的URL的 / 映射到當前用戶的家目錄
  • vsftp以ftp用戶的身份運行進程
    • 默認用戶即為ftp用戶,匿名用戶的默認路徑即為ftp用戶的家目錄 /var/ftp
    • 匿名用戶:ftp、anonymous

2)程序結構

  • 主程序:/usr/sbin/vsftpd
  • Unit File:/usr/lib/systemd/system/vsftpd.service
  • 主配置文件:/etc/vsftpd/vsftpd.conf
  • 數據根目錄:/var/ftp

3.2 vsftp的用戶類別 

  • 匿名用戶
    • anonymous --> ftp   : /var/ftp
    • 匿名用戶其實也是系統用戶,只不過這個系統用戶叫ftp,而這個用戶的家目錄為/var/ftp
  • 系統用戶
    • 若系統用戶可以訪問,則此用戶可以通過ftp訪問該系統上任何可以被該用戶訪問的資源,家目錄就是用戶的家目錄
    • /etc/pam.d/vsftp文件中include了passwd-auth.so,而這個文件中又包含了pam_unix.so,這個文件就定義了可以通過系統用戶來訪問
    • 注意:至少禁止系統用戶訪問ftp服務
      • /etc/vsftpd/ftpusers
      • PAM(/etc/pam.d/vsftpd)
  • 虛擬用戶
    • 非系統用戶,用戶賬號不是可登陸操作系統的用戶賬號(非/etc/passwd)

注意:

  • 用戶通過vsftpd服務訪問到的默認路徑,是用戶自己的家目錄,默認可以在自己有權限訪問的所有路徑間切換
  • 要禁錮用戶於其家目錄中

3.3 配置vsftpd

注意事項:

  • 如果開啟了chroot_list_enable功能,需要自行創建chroot_list_file指定的文件,否則vsftpd服務無法正常提供服務

4. vsftpd認證虛擬用戶

4.1 先創建一個系統用戶

  • 因為虛擬用戶要使用這個系統用戶訪問文件,所以需要先創建一個系統用戶
# 設置該用戶的主目錄為/home/vsftpd, 且禁止ssh登錄
useradd  vsftpd  -d  /home/vsftpd  -s  /sbin/nologin

4.2 創建虛擬用戶

1)創建虛擬用戶主目錄

mkdir  -p  /home/vsftpd/{ftp1, ftp2}

2)創建虛擬用戶

vim  /etc/vsftpd/loginuser
# 添加:
   ftp1
   123
   ftp2
   456
# 創建了ftp1和ftp2這兩個虛擬用戶,密碼分別為123和456

4.3 創建數據庫文件

1)使用db_load命令生成db

  • 因為保存虛擬賬號和密碼的文本文件無法被系統賬號直接調用,所以需要使用db_load命令來生成db
db_load  -T  -t  hash  -f  /etc/vsftpd/loginuser  /etc/vsftpd/loginuser.db
# 參數說明:
#    -T:允許應用程序能夠將文本文件轉譯載入進數據庫
#    -t hash  :使用hash加密
#    -f:指定包含用戶名和密碼的文本文件(此文件的格式為:奇數行為用戶名,偶數行為密碼)

2)修改數據庫文件的權限

chmod  600  /etc/vsftpd/{loginuser,loginuser.db}

4.4 pam認證中加入數據庫文件認證

  • 在vsftpd對應的pam認證模塊中加入數據庫文件認證
vim  /etc/pam.d/vsftpd # 清空后加入:
auth  sufficient  /lib64/security/pam_userdb.so  db=/etc/vsftpd/loginuser
account  sufficient  /lib64/security/pam_userdb.so  db=/etc/vsftpd/loginuser

# 注意,這里的就是上面創建的文件數據庫, 這里的loginuser不需要加db的后綴

4.5 創建虛擬用戶配置文件

  • 將所有的虛擬用戶的配置文件統統放入這個目錄,且目錄中配置文件的名稱必須與虛擬用戶名一致
    • mkdir  /etc/vsftpd/userconf/
  • 創建各個虛擬用戶的配置文件
    vim  /etc/vsftpd/userconf/ftp1
    local_root
    =/home/vsftpd/ftp1/ # 設定主目錄為/home/vsftpd/ftp1 write_enable=YES
    anon_upload_enable
    =YES anon_mkdir_write_enable=YES anon_other_write_enable=YES

4.6 修改主配置文件

  • 修改/etc/vsftpd/vsftpd.conf
anonymous_enable=NO                  # 禁止匿名用戶登錄
chroot_local_user=YES                # 禁止用戶訪問除主目錄以外的目錄
ascii_upload_enable=YES              # 設定支持ASCII模式的上傳和下載功能
ascII_download_enable=YES

chown_uploads=YES                    # 允許虛擬用戶上傳文件
chown_username=vsftpd                # 注意:這里是創建的Linux本地用戶vsftpd, 不改這里虛擬用戶將不能下載文件

guest_enable=YES                     # 啟動虛擬用戶
guest_username=vsftpd                # 虛擬用戶使用的系統用戶名
user_config_dir=/etc/vsftpd/userconf # 虛擬用戶使用的配置文件目錄
allow_writeable_chroot=YES 
# 最新版的vsftpd為了安全必須用戶主目錄(也就是/home/vsftpd/ftp1)沒有寫權限,才能登陸,
# 或者使用allow_writeable_chroot=YES

4.7 vsftpd創建虛擬用戶的資料

  • https://blog.csdn.net/make_zhf/article/details/81099184
  • https://www.cnblogs.com/tssc/p/9582780.html
  • http://www.myjishu.com/?p=369

5. pam_mysql認證ftp虛擬用戶

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM