安裝與預設狀態
sudo apt-get install vsftpd
- 安裝後自動建立
/home/ftp 匿名根目錄
- 預設:允許匿名下載、禁止上傳
- 測試:
ftp://伺服器IP 應顯示空白目錄
核心配置 /etc/vsftpd.conf
# 備份原檔
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old
# 關鍵參數
anonymous_enable=NO # 禁用匿名
local_enable=YES # 啟用本地帳號
write_enable=YES # 允許寫入
ftpd_banner=Welcome to FTP # 歡迎訊息
max_clients=100 # 最大連線數
# Chroot 限制用戶無法跳出家目錄
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
# 個別用戶根目錄覆寫
user_config_dir=/etc/vsftpd_user_conf
建立 Chroot 名單
sudo nano /etc/vsftpd.chroot_list
# 逐行輸入需限制的用戶帳號
linyupark
webuser1
webuser2
將特定用戶根目錄導向 public_html
# 建立個別配置目錄
sudo mkdir -p /etc/vsftpd_user_conf
# 為用戶建立配置檔
sudo nano /etc/vsftpd_user_conf/linyupark
# 內容:
local_root=/home/linyupark/public_html
重啟生效
sudo systemctl restart vsftpd
驗證清單
- FTP 客戶端以
linyupark 登入 → 直接進入 public_html,無法 cd .. 返回上層
- 匿名登入 → 拒絕 (530 Login incorrect)
- 上傳/刪除/建立目錄 → 正常運作
進階安全建議
- 啟用 SSL/TLS (FTPS):
ssl_enable=YES、指定憑證檔
- 被動模式埠口範圍:
pasv_min_port=40000 pasv_max_port=40100,防火牆對應開放
- 整合 PAM 或虛擬用戶 (MySQL/PostgreSQL) 脫離系統帳號
- Fail2ban 監控 vsftpd 日誌自動封鎖暴力破解 IP