普通使用者執行 passwd 修改密碼時,常遇到 BAD PASSWORD: it is based on a dictionary word 錯誤。本文解析驗證機制並提供解決辦法。
Linux 密碼驗證由兩層把關:
/etc/login.defs:定義最小長度等基本規則。/etc/pam.d/passwd:PAM 模組(如 pam_cracklib.so)執行複雜度檢查——字典詞、用戶名相似、過短等。Root 使用者修改任何密碼可繞過檢查(仍會警告但允許);普通使用者修改自身密碼必須通過所有檢查。
| 錯誤訊息 | 原因 | 對應設定 |
|---|---|---|
| it's WAY too short | 長度不足 | /etc/login.defs |
| it is based on your username | 含用戶名 | /etc/pam.d/passwd |
| it is based on a dictionary word | 含字典詞 | /etc/pam.d/passwd (pam_cracklib) |
採用 英文大小寫 + 數字 + 符號,長度 ≥ 8 字元,避免常見單詞、鍵盤排列(如 qwerty)、個人資訊。例:K7#mP2$v。
編輯 /etc/pam.d/passwd 或 /etc/pam.d/system-auth,修改 pam_cracklib.so 參數:
minlen=8 最小長度dcredit=-1 至少 1 個數字ucredit=-1 至少 1 個大寫lcredit=-1 至少 1 個小寫ocredit=-1 至少 1 個特殊字元difok=3 與舊密碼至少 3 字元不同dictpath=/path/to/dict 自訂字典(或移除字典檢查)修改後即時生效,無需重啟。
passwdpasswd username理解 PAM 機制,既能快速通過驗證,也能依安全需求調整策略平衡便利與強度。