Linux
為什麼 OpenWrt 的 root 密碼最大長度是 8 個字元?
當我嘗試設置
root
密碼時:root@OpenWrt:~# passwd Changing password for root Enter the new password (minimum of 5, maximum of 8 characters) Please use a combination of upper and lower case letters and numbers.
似乎最大長度為 8。如果我嘗試設置長於 8 的密碼,則只有前 8 個字元有效。如何設置更長的密碼
root
?我的 OpenWrt 版本:
Linux OpenWrt 4.14.108 #0 SMP Wed Mar 27 21:59:03 2019 x86_64 GNU/Linux
這是因為基於 DES 的 crypt(又名“descrypt”)將密碼截斷為 8 個字節,並且僅檢查前 8 個字節以進行密碼驗證。
這是您直接問題的答案,但這裡有一些您的上下文暗示的一般建議:
- 幸運的是,根據我的閱讀,
MD5
in/etc/login.defs
實際上是 md5crypt ( $ 1 $ ),雖然它的作者有點過時並宣布棄用,但仍然遠遠優於基於 DES 的 crypt(並且絕對比原始的、未加鹽的雜湊(如普通 MD5)好得多!大多數未加鹽的雜湊可以在商品 GPU 上以速率破解每秒數十億)- 看起來
SHA256
(actually sha256crypt) 和SHA512
(actually sha512crypt) 也在那裡。我會選擇其中之一。- 如果您將密碼設置為
password
或在每個方案下設置密碼,您可以直覺地驗證我關於它們是 -crypt 變體的結論是否正確(此處的範例取自hashcat 範例 hashes,全部為 ‘hashcat’,一些包裝為可讀性):不推薦 - 無鹽或傳統雜湊類型,對於密碼儲存來說太“快”(破解率):
MD5 - 8743b52063cd84097a65d1633f5c74f5 SHA256 - 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935 SHA512 - 82a9dda829eb7f8ffe9fbe49e45d47d2dad9664fbb7adf72492e3c81ebd3e2 \ 9134d9bc12212bf83c6840f10e8246b9db54a4859b7ccd0123d86e5872c1e5082f descrypt - 48c/R8JAv757A
好的 - 比無鹽更好,沒有截斷,但不再足夠抵抗現代硬體上的蠻力:
md5crypt - $1$28772684$iEwNOgGugqO9.bIz5sk8k/
更好 - 具有大鹽和工作因素的相對現代的雜湊:
sha256crypt - $5$rounds=5000$GX7BopJZJxPc/KEK$le16UF8I2Anb.rOrn22AUPWvzUETDGefUmAV8AZkGcD sha512crypt - $6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/
其中,只有 descrypt 在 8 處截斷。最後兩個是你最好的選擇。
(旁注:上面 md5crypt 和 sha512crypt 範例中的純數字鹽只是 hashcat 如何創建範例散列的副作用;真正的、健康的鹽通常來自更大的密鑰空間)。
另請注意,我僅列出該平台上 /etc/login.defs 支持的雜湊類型。對於一般用途,甚至 sha256crypt 和 sha512crypt 也已被取代 - 首先被 bcrypt 取代,然後被真正的抗並行攻擊散列(如 scrypt 和 Argon2 系列)取代。(但是請注意,對於應該在一秒鐘內完成的互動式登錄,bcrypt 實際上比後者更能抵抗攻擊)