FTP 客戶端連線時回報 530 Login incorrect,但系統用戶密碼確認無誤。伺服器環境:CentOS 6.5 x86_64,vsftpd 2.2.2,系統用戶 Shell 設為 /sbin/nologin。
vsftpd 預設透過 PAM 模組 pam_listfile.so 讀取 /etc/vsftpd/ftpusers 黑名單,拒絕列表內用戶登入。許多教程錯誤建議將 deny 改為 allow,導致自建用戶同樣被拒。
/etc/vsftpd/vsftpd.conf# 必須啟用的關鍵項
local_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO # 白名單模式(可選)
tcp_wrappers=YES
注意:Ubuntu 可能需 pam_service_name=ftp,請對應檢查 /etc/pam.d/ 目錄。
/etc/vsftpd/ftpusers# 預設內容(系統保留帳號)
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
操作:將需要 FTP 登入的系統用戶從此檔案中刪除(或加 # 註解)。
嚴禁 修改 /etc/pam.d/vsftpd 中的 sense=deny 為 allow,否則白名單機制失效,所有非黑名單用戶均被拒。
/etc/init.d/vsftpd restart
# 或 systemctl restart vsftpd
# /etc/pam.d/vsftpd 關鍵行
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
item=user:檢查用戶名sense=deny:命中列表則拒絕file=...:黑名單路徑onerr=succeed:檔案讀取錯誤時預設通過(避免誤鎖全員)# vsftpd.conf
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
僅允許 /etc/vsftpd/user_list 內用戶登入,更安全可控。
| 錯誤做法 | 後果 | 正確做法 |
|---|---|---|
| 改 PAM sense=allow | 自建用戶也 530 | 編輯 ftpusers 黑名單 |
| 設 Shell 為 /bin/false | 同樣無法登入 | 用 /sbin/nologin 並加入 /etc/shells |
| 關閉 SELinux 不設布林值 | ftpd_full_access 可能仍阻擋 | setsebool -P ftpd_full_access=1 |
ftp localhost → 輸入用戶密碼 → 230 Login successfulls、put、get 測試讀寫權限tail -f /var/log/vsftpd.log 觀察連線日誌