在 Linux 中檢查密碼複雜度,代表的是在作業系統接受候選密碼之前,依據 Pluggable Authentication Modules 堆疊所強制執行的規則來評估該密碼。現代發行版會在使用者建立、變更密碼以及替換 SSH 金鑰密碼時,執行 pam_pwquality、pam_cracklib 或 libpam-pwquality,而 pwscore 這類工具則會回傳一個浮點數評分,系統其餘部分都依此運作。作業系統層級的檢查只會在你輸入並提交候選密碼進入雜湊流程之後才執行,並從一小組固定的「BAD PASSWORD」訊息中回報通過或失敗的決定。在瀏覽器中執行的本機稽核能補足這個流程,讓你看到系統正在評估的確切長度、字元群組以及明顯模式,如此你就能在 passwd 拒絕之前先修訂密碼。Password Strength Checker 提供這種事前預覽:它會計算 Unicode 字碼點、標記簡單的重複或連續模式,並依據 NIST SP 800-63B 指引給出五級標籤,而且不會上傳你即將提交的機密資料。

Linux 密碼複雜度預設值及其盲點
在 RHEL、CentOS Stream、Fedora、Rocky 與 AlmaLinux 中,規則位於 /etc/security/pwquality.conf,並由 /etc/pam.d/system-auth 中的 pam_pwquality.so 載入。影響 Linux 密碼複雜度檢查的參數包括 minlen、minclass、lcredit、ucredit、dcredit、ocredit、maxrepeat、gecoscheck 與 dictpath。Debian 與 Ubuntu 使用同一套函式庫,名稱為 libpam-pwquality,而較舊的 libpam-cracklib 仍存在於尚未遷移原則的長維護週期系統上。
這個堆疊中的工具只能讓你從狹隘的角度窺見評分結果:
- pwscore 透過 passwd --stdin 呼叫時,會回傳介於 0 到 4 之間的單一分數;預設會拒絕低於 2 的值,而輸出就只有這個數字。
- cracklib 的訊息(例如「it is too simplistic/systematic」或「it is based on a dictionary word」)只指出類別,從不顯示實際觸發的規則。
- passwd 不論背後理由為何,都只會印出相同的簡短 BAD PASSWORD 訊息。
常見的落差在於:當你看到拒絕訊息時,候選密碼已經被雜湊、評分並丟棄,而除了猜測更長的字串之外,你沒有明確的修正路徑。在 passwd 看到候選密碼之前執行的本機稽核,正好能填補這個空缺。Password Strength Checker 採用 pwquality 偏好的相同長度門檻,但會以白話解釋每個輸入,而且絕不傳輸你輸入的內容。因此這個強度計量器是 chage、pwscore 以及 /etc/security 中原則檔案的有力輔助,特別是在共用的管理機器上,因為把候選密碼打進遠端稽核工具是相當冒險的做法。
在作業系統看到密碼之前先執行本機複雜度稽核
在你要把密碼提交到任何 Linux 帳號、sudo 認證、SSH 金鑰密碼或由同一部工作機處理的網路服務之前,請先使用本機稽核。
- 在 Linux 工作機或即將設定密碼的機器上,於瀏覽器中開啟 Password Strength Checker。
- 在輸入欄位中輸入或貼上候選密碼。該欄位預設為隱藏並完全在本機運作;只有在需要確認你輸入的確切字元時,才按 Show。
- 閱讀結果面板。它會回報 Unicode 字碼點長度、敘述性的字元群組數量(小寫、大寫、數字、符號、空白字元、非 ASCII),以及模式旗標(無模式、重複區塊或連續序列)與五級標籤。
- 依據建議採取行動:拉長過短的字串、打散重複區塊,或替換單調的序列。重新輸入修訂後的值,並觀察標籤在 Weak、Fair、Good、Strong 之間移動。
- 當計量器回報 Good 或 Strong 且沒有模式旗標時,將密碼提交到實際服務,讓作業系統層級的檢查做最終裁決。若 passwd 仍然拒絕,請參考建議與服務本身的封鎖清單訊息。
這個循環讓所有候選密碼都留在你的硬體上。完全不會透過網路傳送,因此稽核同樣適用於隔離網路的建置主機、獨立的跳板機以及個人筆電。
5 級分數如何對應長度與模式
這個分數是透明的回饋規則,而非機率性的保證。以下的門檻直接來自計量器,讓你能在輸入完成前預測標籤。
| 長度(Unicode 字碼點) | 模式旗標 | 標籤 |
|---|---|---|
| 0 | 任何 | 空白(分數 0) |
| 1–7 | 任何 | Weak |
| 8–14 | 無 | Fair |
| 8–14 | 重複或連續 | Fair(上限封頂) |
| 15–19 | 無 | Good |
| 20 或以上 | 無 | Strong |
上限很重要。像 aaaa1111bbbb 這種 12 字元的候選密碼仍然只得到 Fair,因為計量器會偵測到像 a 重複四次這類單一字元區塊。同樣地,1234abcd5678 也止步於 Fair,因為 1234 或 5678 是長度為四個字碼點的單調序列。字元群組數量僅供敘述——它列出涵蓋了多少個大類別,但不要求每一類都出現。強制組合規則往往會產生可預測的替代模式,而這類模式會出現在每一次的資料外洩彙整中;現行 NIST SP 800-63B 指引將長度與封鎖清單篩選看得比「大寫加符號」的組合更為重要。完整的推導過程,包括為何不標示熵位元數,都詳述於 分數背後的演算法。
長度與組合規則:Linux PAM 實際獎勵的是什麼
許多管理員仍把字元群組多樣性視為主要防線,因為預設的 pwquality 範本中帶有 minclass=4。實際上,組合規則會驅動可預測的替換:像 Password1! 這種字串看似多元,卻幾乎出現在每一份現代資料外洩彙整中。依據 NIST SP 800-63B 數位身分指引,當密碼是唯一的認證因素時,長度短於 15 字元的密碼會被視為薄弱,而組合規則的優先順序已降低,改為強調長度、對外洩清單進行篩選,以及限制嘗試次數。下表比較本機稽核回報的內容與作業系統堆疊預設強制執行的內容。
| 特性 | 本機計量器 | pwquality 預設值 |
|---|---|---|
| 長度權重 | 主要訊號(15+ 為 Good,20+ 為 Strong) | minlen(通常為 8 或 9)加上 minclass |
| 組合要求 | 僅供敘述,不強制執行 | 通常透過 minclass 要求 |
| 模式偵測 | 重複的 1–4 字碼點區塊、4 字碼點單調序列 | 透過 cracklib 進行字典與回文檢查 |
| 外洩清單查詢 | 依設計不進行 | 透過 enforce_for_root 與類似旗標可選擇啟用 |
| 回報方式 | 五級標籤,顯示每一條規則 | 通過或失敗,加上含糊的 pwscore 數字 |
| 網路呼叫 | 無 | 無 |
對於產生 20 字元隨機密碼的密碼管理工具,兩個層級的判斷一致。對於人為選擇的 passphrase,本機計量器能標記出作業系統堆疊默默放過的問題,例如某個 12 字元、同時滿足 minclass=4 並夾帶替代數字的片語。
超越本機分數:封鎖清單、MFA 與密碼管理工具
Strong 標籤是必要條件,但並非充分條件。攻擊者並非暴力破解字元組合;他們利用的是資料外洩彙整、字典、服務專屬詞彙、鍵盤走法、個人事實與機率模型。Password Strength Checker 刻意避免查詢任何遠端服務,因此無法判斷候選密碼是否已出現在外洩清單中。正如 這篇關於本機密碼測試的指南 所討論,Strong 標籤僅涵蓋長度與兩項狹隘的模式檢查。OWASP Authentication Cheat Sheet 也認可同樣的界線,把封鎖清單篩選、MFA 與嘗試次數限制排在組合規則之前。
把這個計量器視為挑選更佳密碼的指引。一旦它在沒有模式旗標的情況下給出 Good 或 Strong,請把候選密碼送進其餘檢查項目:
- 為每個 Linux 帳號、SSH 金鑰密碼與網路服務,產生由管理工具儲存的獨特密碼。一段冗長的隨機字串勝過任何字典都能涵蓋的易記句子。
- 將最終值送交服務供應商本身的資料外洩或封鎖清單檢查。多數現代網頁應用程式會執行伺服器端檢查,而這是計量器無法複製的。
- 為 root、sudo、郵件、財務與雲端管理員帳號啟用多因素認證。在服務支援的情況下,優先選擇 FIDO2 passkey 或硬體權杖。
- 僅在密碼被重複使用、外洩或疑似遭到破解時才變更,而不是依據任意週期。依據 NIST SP 800-63B,除非有遭到破解的證據,否則不再建議排程輪替。
- 確認服務使用帶鹽的密碼雜湊函式(例如 Argon2id、bcrypt 或 scrypt)儲存雜湊後的密碼,而非快速的 SHA-1 或可逆加密。
對於撰寫 /etc/security/pwquality.conf 的 Linux 管理員,請先用計量器測試候選最小長度,使其對應實際門檻,再進行部署。若稽核顯示一般使用者選擇的片語在 12 字元處失敗、只在邊界值通過,那麼 minlen=15 就形同虛設;這個資料點能指引訓練與政策方向。在工作機上執行稽核,再交由 passwd 與 PAM 堆疊做出最終決定,你就能同時擁有作業系統層級的保證,以及計量器提供的人類可讀推論。