FTP 協定基礎#

FTP(File Transfer Protocol)是檔案傳輸協定,採用明碼傳輸,透過兩個獨立連線運作:

  • 命令通道(port 21):傳送控制指令
  • 資料傳輸通道(port 20 或隨機埠口):實際傳輸檔案

這種「雙通道」設計是 FTP 與其他協定最大的不同,也是造成防火牆設定複雜的原因。

兩種連線模式#

主動式(Active)#

伺服器主動以 port 20 向用戶端發起資料連線。

在 NAT 或防火牆環境下,主動式連線容易失敗,因為伺服器無法穿透用戶端的 NAT 建立連線。

被動式(Passive)#

用戶端主動連接伺服器隨機開啟的高位埠口。因連線由內向外發起,較適合防火牆後的用戶端。現代環境幾乎都使用被動模式。

使用者身份分類#

FTP 支援三種身份等級:

  1. 實體帳號:系統真實使用者,可存取完整權限範圍
  2. 訪客(guest):受限權限,通常被限制在特定目錄
  3. 匿名使用者(anonymous):最低權限,用於公開檔案下載

安全機制#

Chroot 隔離#

將使用者限制在特定目錄,無法存取系統其他部分。對於 FTP 服務來說,chroot 是最基本的安全要求

帳號管控#

  • ftpusers:列在此檔案中的帳號禁止登入 FTP
  • user_list:根據設定可作為白名單或黑名單
  • 系統帳號(如 root)預設被禁止登入 FTP,避免明碼傳輸密碼被攔截

PAM 與 SELinux#

透過 PAM 模組進行驗證流程控制,SELinux 的安全性本文控制存取權限。

vsftpd 設計哲學#

vsftpd(Very Secure FTP Daemon)以安全為首的架構設計:

  • 低權限程序執行,減少被入侵後的傷害
  • 內建指令整合,不依賴系統工具
  • 不信任使用者要求原則

加密替代方案#

由於 FTP 為明碼傳輸,敏感環境應考慮:

  • FTPS:FTP over SSL/TLS,為 FTP 加上加密層
  • SFTP:SSH File Transfer Protocol,完全基於 SSH 通道,更安全且更簡單

在現代環境中,FTP 正逐漸被 SFTP 和基於 HTTPS 的檔案傳輸取代。若無特殊需求,建議優先使用 SFTP,它不需要額外的伺服器軟體(SSH 即內建)。

日誌與除錯#

  • 傳輸紀錄:/var/log/xferlog
  • 診斷資訊:/var/log/messages
  • 設定檔:/etc/vsftpd/vsftpd.conf