匿名 FTP 若配置不當,極易成為惡意軟體散佈站、盜版資源倉庫、跳板攻擊踏腳石。本文依據 CERT/CC 建議與現代最佳實踐,建立從「目錄結構、權限模型、寫入隔離、使用者限制、日誌稽核、異常檢測」的纏繞防禦體系。
/ftp_root/ (根目錄,僅供讀取/列表)
├── bin/ (必要執行檔,如 ls、cp — chroot 環境需求)
├── etc/ (passwd、group 虛擬檔案 — 不含真實帳號)
├── pub/ (公開下載區,唯讀)
│ ├── software/
│ ├── docs/
│ └── drivers/
├── incoming/ (上傳投遞箱,僅寫入,不可讀/列表/刪除)
│ ├── dept_a/ (部門專屬上傳,已知隨機名稱)
│ └── dept_b/
└── users/ (實名使用者專屬目錄,非匿名)
├── alice/
└── bob/
| 目錄 | 擁有者:群組 | 權限 (oct) | 說明 |
|---|---|---|---|
| /ftp_root | root:root | 755 (rwxr-xr-x) | 根目錄唯讀,防止匿名建立檔案/目錄 |
| /ftp_root/bin | root:root | 755 | 僅含必要二進制檔 (ls 等),不可寫入 |
| /ftp_root/etc | root:root | 755 | 虛擬 passwd/group,密碼欄位用 * 替代 |
| /ftp_root/pub | root:root | 755 | 公開下載,匿名可讀/列表,不可寫入 |
| /ftp_root/incoming | root:root | 733 (rwx-wx-wx) | 可進入 (x)、可建立檔案 (w)、不可列表 (無 r) |
| /ftp_root/incoming/dept_a | root:ftp_dept_a | 733 | 隨機名稱 (如 jAjwUth2),僅授權人員知曉 |
rem 根目錄
icacls "D:\FTPRoot" /grant "Administrators:(OI)(CI)F" "SYSTEM:(OI)(CI)F" "Anonymous:(RX)" /inheritance:r
rem pub 唯讀
icacls "D:\FTPRoot\pub" /grant "Anonymous:(OI)(CI)(RX)" /inheritance:r
rem incoming 投遞箱 (寫入不可讀)
icacls "D:\FTPRoot\incoming" /grant "Anonymous:(OI)(CI)(WD,AD)" /inheritance:r
icacls "D:\FTPRoot\incoming" /deny "Anonymous:(OI)(CI)(RX)" /inheritance:r
# 匿名存取控制
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO # 禁止刪除/重命名/修改現有檔案
anon_root=/ftp_root # 匿名根目錄 (chroot)
# 上傳限制
anon_max_rate=1024000 # 匿名上傳限速 1MB/s
local_max_rate=5120000 # 本地用戶 5MB/s
# 目錄隔離
chroot_local_user=YES # 本地用戶 chroot 至家目錄
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list # 例外清單
# 虛擬用戶 (推薦替代系統帳號)
guest_enable=YES
guest_username=ftpvirtual
user_config_dir=/etc/vsftpd_user_conf
virtual_use_local_privs=YES
# 日誌與稽核
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
dual_log_enable=YES # 同時輸出 wu-ftpd 格式
log_ftp_protocol=YES # 記錄完整 FTP 指令流
# 連線控制
max_clients=200
max_per_ip=10
idle_session_timeout=300
data_connection_timeout=120
# SSL/TLS (FTPS)
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
SITE CHMOD、SITE EXEC 等危險指令。uploadscript 外部腳本處理上傳事件。incoming/ 權限 733 (不可列表)。jAjwUth2、MhaLL-iF),僅透過安全管道告知授權上傳者。/ftp_root/incoming 掛載至獨立磁碟/邏輯卷 (LVM/ZFS dataset)。noexec,nodev,nosuid、快照備份/回滾獨立運作。防止合法 FTP 用戶跳出家目錄存取系統敏感區域:
groupadd ftpusersuseradd -g ftpusers -d /ftp_root/users/alice -s /sbin/nologin alice (禁用 Shell 登入)/etc/ftpaccess 加入:guestgroup ftpuserschroot everyone (或 guestgroup ftpusers 配合 limit 指令)/bin/ls 等必要二進制檔至用戶 bin/ 目錄,或使用靜態編譯 busybox。%FTP_ROOT%\%UserName%) 或 使用者名稱實體目錄 (AD/本地用戶家目錄)。Mon Oct 23 03:15:00 2000 0 192.168.1.50 1024 /pub/software/patch.exe b _ i r anonymous ftp 0 * c
| 規則名稱 | 觸發條件 | 響應等級 |
|---|---|---|
| 暴力破解 | 同一 IP 5 分鐘內 ≥ 10 次 530 Login incorrect | 高 — 自動封鎖 IP 1h |
| 異常大檔案上傳 | 單次上傳 > 100MB 或 單小時上傳總量 > 500MB | 中 — 告警、人工審核 |
| 可疑檔案類型 | 上傳 .exe/.scr/.bat/.ps1/.jar/.php/.asp/.jsp (非白名單) | 高 — 隔離檔案、封鎖 IP |
| 非工作時間大量下載 | 00:00-06:00 下載流量 > 日均 3 倍 | 中 — 告警 |
| 目錄遍歷嘗試 | FTP 指令含 ../、..\、C:\、/etc/passwd | 高 — 封鎖 IP、WAF 規則更新 |
/incoming/README.txt 明確聲明禁止上傳盜版/非法/惡意內容,保留法律追究權利。現代替代方案:SFTP (SSH File Transfer Protocol) + Chroot/Jail + 金鑰認證 + 雙因子認證 (2FA)。SFTP 單一連接埠 (22)、強加密、原生支援 chroot、無主動/被動模式 NAT 困擾、整合系統帳號/LDAP/AD。強烈建議新部署棄用 FTP/FTPS,全面遷移至 SFTP 或物件存儲 (S3/MinIO/Azure Blob) + 預簽名 URL。