Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> FTP 伺服器

Linux vsftpd 530 Login incorrect 錯誤根因分析與解決:PAM 配置缺失

編輯:FTP 伺服器

錯誤現象

Command: USER testuser
Response: 331 Please specify the password.
Command: PASS ********
Response: 530 Login incorrect.
Error: Critical error

明確帳號密碼正確,網路連通正常,但登入失敗。

核心根因

vsftpd 啟用 PAM 認證,但 /etc/pam.d/vsftpd 配置檔缺失或不正確,導致本地系統用戶無法通過 PAM 驗證。僅匿名用戶(繞過 PAM)可登入。

兩種解決方案

方案一:複製原始碼提供的 PAM 模板(推薦,源碼安裝適用)

# 假設 vsftpd 原始碼解壓目錄為 /usr/local/src/vsftpd-3.0.3
cp /usr/local/src/vsftpd-3.0.3/RedHat/vsftpd.pam /etc/pam.d/vsftpd

# 重啟服務
systemctl restart vsftpd

原理: 官方源碼提供的 vsftpd.pam 正確引用 pam_listfile.so(黑名單)、pam_shells.so(Shell 合法性)、password-auth(系統密碼驗證)。

方案二:手動補充關鍵參數 pam_service_name=vsftpd(適用套件安裝)

# 1. 確認 /etc/pam.d/vsftpd 存在且內容正確
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

# 2. 確認 vsftpd.conf 指定正確的 PAM 服務名
grep "pam_service_name" /etc/vsftpd/vsftpd.conf
# 若無輸出或不為 vsftpd,追加:
echo "pam_service_name=vsftpd" >> /etc/vsftpd/vsftpd.conf

# 3. 重啟服務
systemctl restart vsftpd

完整配置範例(vsftpd.conf 關鍵段)

# 允許本地用戶登入
local_enable=YES
write_enable=YES
local_umask=022

# 匿名用戶關閉
anonymous_enable=NO

# 日誌
xferlog_enable=YES
xferlog_std_format=YES

# 連線模式
connect_from_port_20=YES
listen=YES
tcp_wrappers=YES

# PAM 服務名(關鍵!)
pam_service_name=vsftpd

# 用戶清單控制
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

驗證 PAM 配置是否生效

# 使用 pamtester 測試(需安裝 pamtester 套件)
pamtester vsftpd testuser authenticate
# 輸入密碼後顯示 success 即通過

# 或直接 FTP 測試
ftp localhost
# 輸入 testuser / 密碼,應顯示 230 Login successful

常見伴隨問題對照

現象原因解決
530 Login incorrect(帳號密碼確認正確)PAM 服務名錯誤 / /etc/pam.d/vsftpd 缺失 / pam_shells.so 攔截 nologin補上 pam_service_name=vsftpd、確保 /etc/shells 含 /sbin/nologin
500 OOPS: cannot change directorySELinux 阻擋家目錄存取setsebool -P ftp_home_dir=1
用戶可登入但無權限操作write_enable=NO / chroot_local_user=YES 但目錄不可寫開啟 write_enable、設定 allow_writeable_chroot=YES
匿名用戶可登入、本地用戶不可anonymous_enable=YES 但 local_enable=NO 或 PAM 失效設定 local_enable=YES、修復 PAM

最佳實踐檢查清單

  • [ ] /etc/pam.d/vsftpd 存在且引用 password-auth
  • [ ] vsftpd.conf 含 pam_service_name=vsftpd
  • [ ] /etc/shells 包含 /sbin/nologin(或 /usr/sbin/nologin)
  • [ ] FTP 帳號 Shell 設為 /sbin/nologin
  • [ ] FTP 帳號不在 /etc/vsftpd/ftpusers 與 /etc/vsftpd/user_list 黑名單中
  • [ ] local_enable=YES、write_enable=YES
  • [ ] SELinux ftp_home_dir=on(若啟用 SELinux)

總結

530 Login incorrect 在網路與密碼均正確時,90% 以上由 PAM 配置缺失或服務名不匹配 引起。確保 /etc/pam.d/vsftpd 存在、vsftpd.conf 指定 pam_service_name=vsftpd、/etc/shells 包含 nologin,重啟服務即可徹底解決。建議使用套件管理器安裝 vsftpd(自動部署 PAM 配置),避免源碼安裝遺漏此關鍵步驟。

Copyright © Windows教程網 All Rights Reserved