FTP 協定基礎#
FTP(File Transfer Protocol)是檔案傳輸協定,採用明碼傳輸,透過兩個獨立連線運作:
- 命令通道(port 21):傳送控制指令
- 資料傳輸通道(port 20 或隨機埠口):實際傳輸檔案
這種「雙通道」設計是 FTP 與其他協定最大的不同,也是造成防火牆設定複雜的原因。
兩種連線模式#
主動式(Active)#
伺服器主動以 port 20 向用戶端發起資料連線。
在 NAT 或防火牆環境下,主動式連線容易失敗,因為伺服器無法穿透用戶端的 NAT 建立連線。
被動式(Passive)#
用戶端主動連接伺服器隨機開啟的高位埠口。因連線由內向外發起,較適合防火牆後的用戶端。現代環境幾乎都使用被動模式。
使用者身份分類#
FTP 支援三種身份等級:
- 實體帳號:系統真實使用者,可存取完整權限範圍
- 訪客(guest):受限權限,通常被限制在特定目錄
- 匿名使用者(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