Status: Connecting to 192.168.1.100:21...
Status: Connection established, waiting for welcome message...
Response: 220 (vsFTPd 3.0.3)
Command: USER root
Response: 331 Please specify the password.
Command: PASS ********
Response: 530 Permission denied.
Error: Critical error: Could not connect to server
vsftpd 預設禁止 root 等高權限系統帳號登入 FTP,透過 /etc/vsftpd/ftpusers 與 /etc/vsftpd/user_list 兩個黑名單檔案實現。
# 檢查服務狀態
systemctl status vsftpd
# 或
service vsftpd status
# 若未運行,啟動並設定開機自啟
systemctl start vsftpd
systemctl enable vsftpd
關鍵檔案:
| 檔案 | 用途 | 預設包含帳號 |
|---|---|---|
/etc/vsftpd/ftpusers | 永久禁止登入 FTP 的系統帳號(最高優先級) | root, daemon, bin, sys, sync, games, man, lp, mail, news, uucp, nobody 等 |
/etc/vsftpd/user_list | 依 userlist_deny 參數決定允許/禁止(預設為禁止) | 同 ftpusers 類似 |
操作:
# 1. 查看 ftpusers
cat /etc/vsftpd/ftpusers
# 找到您嘗試登入的帳號(如 root),在行首加 # 註解
# root
# 2. 查看 user_list
cat /etc/vsftpd/user_list
# 同樣註解該帳號
# root
# 3. 確認 vsftpd.conf 相關參數
grep -E "userlist_enable|userlist_deny|userlist_file" /etc/vsftpd/vsftpd.conf
# 建議值:
# userlist_enable=YES
# userlist_deny=YES
# userlist_file=/etc/vsftpd/user_list
systemctl restart vsftpd
# 檢查 PAM 設定檔
cat /etc/pam.d/vsftpd
# 正常應包含:
# auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
# auth required pam_shells.so
# auth include password-auth
# account include password-auth
# session include password-auth
# 若缺少 pam_shells.so,帳號 Shell 若為 /sbin/nologin 會被拒絕
# 解決:確保 /etc/shells 包含 /sbin/nologin
echo "/sbin/nologin" >> /etc/shells
# 檢查 FTP 相關布林值
getsebool -a | grep ftp
# 關鍵項:ftp_home_dir、allow_ftpd_full_access
# 若 ftp_home_dir=off,開啟並重啟
setsebool -P ftp_home_dir=1
systemctl restart vsftpd
# 檢查用戶家目錄
ls -ld /home/youruser
# 應為:drwxr-xr-x. 2 youruser yourgroup 4096 ... /home/youruser
# 權限不得為 777,擁有者必須為該用戶
# 修正
chown youruser:yourgroup /home/youruser
chmod 755 /home/youruser
grep -E "local_enable|write_enable|chroot_local_user|allow_writeable_chroot" /etc/vsftpd/vsftpd.conf
# 建議基線:
# local_enable=YES
# write_enable=YES
# chroot_local_user=YES
# allow_writeable_chroot=YES # 允許 chroot 目錄可寫(vsftpd 3.0+)
# 1. 建立專用帳號,禁止 Shell 登入
useradd -s /sbin/nologin -d /home/ftpuser ftpuser
passwd ftpuser
# 2. 設定家目錄權限
chown ftpuser:ftpuser /home/ftpuser
chmod 755 /home/ftpuser
# 3. 確保帳號不在黑名單中
# 編輯 /etc/vsftpd/ftpusers 和 /etc/vsftpd/user_list,確無 ftpuser
# 4. 測試
ftp localhost
# 用戶名:ftpuser,密碼:剛設定的密碼
| 代碼 | 含義 | 常見原因 |
|---|---|---|
| 530 Permission denied | 登入被拒絕 | 帳號在黑名單、PAM 失敗、Shell 不合法、SELinux 阻擋 |
| 530 Login incorrect | 用戶名/密碼錯誤 | 密碼輸入錯誤、PAM 配置錯誤、帳號鎖定 |
| 500 OOPS: cannot change directory | 無法切換到家目錄 | SELinux、目錄不存在、權限錯誤、chroot 設定衝突 |
| 421 Service not available | 服務不可用 | max_clients 達上限、服務未啟動、xinetd 模式配置錯誤 |
530 Permission denied 絕大多數由 帳號在 ftpusers/user_list 黑名單中 引起。依照「服務狀態 → 黑名單檔案 → PAM/SELinux/目錄權限 → 配置參數」順序排查,可在 5 分鐘內定位並解決。生產環境嚴禁使用 root 登入 FTP,請建立專用低權限帳號並配合 chroot 隔離。