VSFTPD 作為 Linux 經典 FTP 服務,主動/被動模式配置直接決定能否穿透 NAT/防火牆。本文系統梳理核心配置文件結構、兩大模式參數詳解、匿名/本地/虛擬用戶權限模型、啟動模式選擇,提供生產級配置模板。
| 路徑 | 用途 |
|---|---|
| /usr/sbin/vsftpd | 主程式 |
| /etc/vsftpd/vsftpd.conf | 主配置文件 |
| /etc/pam.d/vsftpd | PAM 認證配置 |
| /etc/vsftpd/ftpusers | 禁止登入用戶列表 (root 等) |
| /etc/vsftpd/user_list | 允許/禁止登入用戶列表 (受 userlist_enable/deny 控制) |
| /var/ftp | 匿名用戶根目錄 |
| /var/ftp/pub | 匿名上傳目錄 |
listen=YES,systemctl start vsftpd。listen,配置 /etc/xinetd.d/vsftpd。
# 客戶端發起數據連接,服務器從 20 端口主動連回客戶端高端口
# 需防火牆允許「出站」連接至客戶端隨機高端口 (難以預測,主動模式在 NAT 客戶端常失敗)
pasv_enable=NO
port_enable=YES
connect_from_port_20=YES # 強制使用 20 端口發起數據連接
# ftp_data_port=20 # 可自定義數據端口 (罕用)
pasv_enable=YES
pasv_min_port=40000 # 被動模式數據端口範圍起
pasv_max_port=40100 # 被動模式數據端口範圍止 (建議預留 100+ 端口)
# pasv_address=公網IP # 後端有 NAT/負載均衡時,指定對外公網 IP
# pasv_addr_resolve=YES # 支援主機名解析
防火牆必放行: 命令端口 21 + 被動端口範圍 40000-40100 (TCP)。
anonymous_enable=YES
anon_world_readable_only=NO # 允許匿名用戶瀏覽非公開目錄 (視需求)
anon_upload_enable=YES # 允許上傳
anon_mkdir_write_enable=YES # 允許建立目錄
write_enable=YES # 全域寫入開關 (必開)
# 匿名用戶根目錄權限:chown ftp:ftp /var/ftp/pub; chmod 777 /var/ftp/pub
chroot_local_user=YES # 所有本地用戶限制在家目錄
# 或精細控制
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list # 列表內用戶被 chroot (與上互斥)
# 家目錄權限:chown user:user /home/user; chmod 755 /home/user (不可寫)
# 寫入子目錄:mkdir /home/user/upload; chown user:user /home/user/upload; chmod 775
max_clients=200 # 總並發連接數
max_per_ip=10 # 單 IP 並發
anon_max_rate=1024000 # 匿名限速 1000 KB/s
local_max_rate=512000 # 本地用戶限速 500 KB/s
# 用戶級差異限速
user_config_dir=/etc/vsftpd/user_conf
# 文件 /etc/vsftpd/user_conf/username 內容:local_max_rate=2048000
# 建立第二配置
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf
# 修改 vsftpd2.conf: listen_address=第二IP, 匿名/本地根目錄分離
# 建立系統用戶: useradd -d /var/ftp2 -M ftp2
# xinetd 模式下啟動: 在 /etc/xinetd.d/ 建立 vsftpd2 指向 vsftpd2.conf
# systemctl restart xinetd
# /etc/vsftpd/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES # 允許 chroot 目錄可寫 (需目錄權限 755 且擁有者為用戶)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
max_clients=200
max_per_ip=10
local_max_rate=1024000
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd_xfer.log
掌握主被動模式防火牆穿透邏輯、Chroot 安全模型、虛擬用戶擴展,即可構建合規、高效、可監管的 FTP 服務。