前言
/etc/vsftpd/vsftpd.conf 是 vsftpd 的核心配置檔,採用 選項=值 格式(等號兩邊不可有空格),# 開頭為註解。本文將 100+ 參數按功能分類整理,附預設值與實務建議,作為查閱手冊。
一、配置檔基礎格式
# 註解行
選項=值 # 正確:等號兩側無空格
選項 = 值 # 錯誤:等號兩側有空格會被忽略
二、匿名用戶設定
| 參數 | 預設值 | 說明 |
| anonymous_enable | YES | 允許匿名登入(用戶名 ftp/anonymous,密碼任意) |
| no_anon_password | NO | YES 時匿名登入不詢問密碼 |
| ftp_username | ftp | 匿名用戶對應的系統帳號 |
| anon_root | /var/ftp | 匿名用戶登入後的根目錄(不可為 777 權限) |
| write_enable | YES | 全域寫入開關,匿名上傳需同時開啟此項 |
| anon_upload_enable | NO | 允許匿名上傳檔案(需 write_enable=YES + 目錄寫入權限) |
| anon_mkdir_write_enable | NO | 允許匿名建立目錄(需 write_enable=YES) |
| anon_other_write_enable | NO | 允許匿名刪除/重命名(需 write_enable=YES) |
| anon_world_readable_only | YES | YES 僅允許下載可讀檔案 |
| chown_uploads | NO | YES 時改變匿名上傳檔案擁有者 |
| chown_username | — | 指定上傳檔案新擁有者(勿設為 root) |
| anon_umask | 077 | 匿名建立檔案的 umask(077 → 權限 700) |
| deny_email_enable | NO | YES 時需提供 banned_email_file,列入名單者拒絕登入 |
| banned_email_file | /etc/vsftpd/banner_emails | 禁止登入的郵件清單檔案 |
三、本地用戶設定
| 參數 | 預設值 | 說明 |
| local_enable | YES | 允許本地系統用戶登入 |
| local_root | ~ | 本地用戶登入後的根目錄(預設為家目錄) |
| write_enable | YES | 全域寫入開關(影響本地用戶) |
| local_umask | 077 | 本地用戶建立檔案的 umask(建議 022 → 755) |
| file_open_mode | 0666 | 上傳檔案最終權限(配合 umask 計算) |
四、歡迎訊息與目錄訊息
| 參數 | 預設值 | 說明 |
| dirmessage_enable | YES | 進入目錄時顯示 .message 檔案內容 |
| message_file | .message | 目錄訊息檔案名 |
| ftpd_banner | — | 登入時顯示的字串歡迎訊息 |
| banner_file | — | 登入訊息檔案路徑(訊息較長時使用) |
五、用戶目錄限制
| 參數 | 預設值 | 說明 |
| chroot_local_user | NO | YES 將所有本地用戶限制在各自 home 目錄 |
| chroot_list_enable | NO | YES 啟用 chroot_list_file 名單控制 |
| chroot_list_file | /etc/vsftpd.chroot_list | 名單檔案路徑 |
四種組合效果對照
| chroot_list_enable | chroot_local_user | 效果 |
| YES | YES | 名單內用戶可切換上層目錄;名單外不可 |
| YES | NO | 名單內用戶不可切換;名單外可 |
| NO | YES | 所有用戶不可切換上層目錄 |
| NO | NO | 所有用戶可切換上層目錄(預設) |
六、傳輸模式設定
| 參數 | 預設值 | 說明 |
| ascii_upload_enable | NO | 啟用 ASCII 模式上傳(文字檔換行轉換) |
| ascii_download_enable | NO | 啟用 ASCII 模式下載 |
七、存取控制
1. 主機層級:TCP Wrappers
| 參數 | 預設值 | 說明 |
| tcp_wrappers | YES | 啟用後檢查 /etc/hosts.allow、hosts.deny |
# /etc/hosts.allow 範例:僅允許 192.168.0.0/24
vsftpd: 192.168.0. : allow
ALL: ALL : deny
2. 用戶層級:user_list / ftpusers
| 參數 | 預設值 | 說明 |
| userlist_enable | NO | 啟用 user_list 檔案控制 |
| userlist_file | /etc/vsftpd.user_list | 用戶清單檔案(一行一用戶名) |
| userlist_deny | YES | YES:名單內禁止;NO:僅名單內允許 |
優先序: /etc/vsftpd/ftpusers(永久禁止,通常含 root、daemon 等系統帳號)> user_list(依 userlist_deny 決定)。
八、傳輸速率限制
| 參數 | 預設值 | 說明 |
| anon_max_rate | 0 | 匿名用戶最大傳輸速度(Bytes/sec,0=不限制) |
| local_max_rate | 0 | 本地用戶最大傳輸速度(Bytes/sec) |
範例:local_max_rate=102400 限制 100 KB/s。
九、逾時設定
| 參數 | 預設值 | 單位/說明 |
| accept_timeout | 60 | 秒,建立 FTP 連線逾時 |
| connect_timeout | 60 | 秒,PORT 模式資料連線逾時 |
| data_connection_timeout | 120 | 秒,資料傳輸連線逾時 |
| idle_session_timeout | 300 | 秒,閒置逾時斷線 |
十、日誌設定
| 參數 | 預設值 | 說明 |
| xferlog_enable | YES | 啟用上傳/下載傳輸日誌 |
| xferlog_file | /var/log/vsftpd.log | 日誌檔案路徑 |
| xferlog_std_format | NO | YES 使用標準 xferlog 格式(wu-ftpd 相容) |
| log_ftp_protocol | NO | YES 記錄所有 FTP 命令/回應(除錯用,與 xferlog_std_format 互斥) |
十一、用戶獨立配置
| 參數 | 說明 |
| user_config_dir | 目錄路徑,裡面放置與用戶名同名的檔案,登入時自動套用該檔配置(覆蓋全域設定)。 範例:user_config_dir=/etc/vsftpd/userconf,用戶 test1 登入 → 讀取 /etc/vsftpd/userconf/test1。 |
十二、FTP 工作模式與埠口
| 參數 | 預設值 | 說明 |
| listen_port | 21 | 控制連線監聽埠 |
| connect_from_port_20 | YES | PORT 模式使用 20 埠傳輸資料 |
| ftp_data_port | 20 | PORT 模式資料埠 |
| pasv_enable | YES | 啟用 PASV 被動模式 |
| pasv_min_port | 0 | PASV 模式資料埠最小值(0=任意) |
| pasv_max_port | 0 | PASV 模式資料埠最大值(0=任意) |
防火牆建議: 被動模式需開放 pasv_min_port–pasv_max_port 範圍(如 50000–51000),主動模式需開放 20 埠。
十三、連線相關設定
| 參數 | 預設值 | 說明 |
| listen | YES | 獨立模式運行(建議保持 YES,許多參數需此模式生效) |
| max_clients | 0 | 最大並發連線數(0=不限,需 listen=YES) |
| max_per_ip | 0 | 單一 IP 最大並發連線(0=不限,需 listen=YES) |
| listen_address | — | 指定監聽 IP(多網卡時),需 listen=YES |
| setproctitle_enable | NO | YES 時每連線顯示獨立 vsftpd 進程(ps 可見) |
十四、虛擬用戶設定
| 參數 | 預設值 | 說明 |
| pam_service_name | vsftpd | PAM 服務名(對應 /etc/pam.d/vsftpd) |
| guest_enable | NO | YES 啟用虛擬用戶 |
| guest_username | ftp | 虛擬用戶映射的系統用戶 |
| virtual_use_local_privs | NO | YES 時虛擬用戶享有本地用戶權限;NO 時同匿名用戶權限基準 |
十五、其他常用參數
| 參數 | 預設值 | 說明 |
| text_userdb_names | NO | YES 時 ls -l 顯示用戶/組名而非 UID/GID |
| ls_recurse_enable | NO | YES 允許 ls -R 遞歸列表 |
| hide_ids | NO | YES 時所有檔案擁有者顯示為 ftp |
| download_enable | YES | NO 禁止所有檔案下載(目錄列表不受影響) |
十六、生產環境建議基準配置片段
# 安全基線
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES # 允許 chroot 目錄可寫(需 vsftpd 3.0+)
# 效能與限制
max_clients=200
max_per_ip=10
local_max_rate=1048576 # 1 MB/s
idle_session_timeout=600
data_connection_timeout=300
# 被動模式埠口範圍(防火牆需對應開放)
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=51000
# 日誌審計
xferlog_enable=YES
xferlog_std_format=YES
log_ftp_protocol=YES
# TLS 加密(需額外配置憑證)
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
force_local_data_ssl=YES
force_local_logins_ssl=YES
十七、修改配置後生效方式
# 檢查語法
vsftpd -olisten=NO /etc/vsftpd/vsftpd.conf 2>&1 | head
# 重啟服務
systemctl restart vsftpd # systemd 系統
service vsftpd restart # SysVinit 系統
本文涵蓋 vsftpd 核心配置參數的完整分類說明,建議收藏作為日常運維查閱手冊。實際部署時請根據業務需求、合規要求與安全基線進行裁剪與調整。