为什么OpenWrt的root密码最大长度是8个字符?

Ala*_*n42 29 linux password root openwrt passwd

当我尝试设置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.
Run Code Online (Sandbox Code Playgroud)

似乎最大长度是 8。如果我尝试设置超过 8 的密码,则只有前 8 个字符有效。如何设置更长的密码root

我的 OpenWrt 版本:

Linux OpenWrt 4.14.108 #0 SMP Wed Mar 27 21:59:03 2019 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

Roy*_*ams 35

这是因为基于 DES 的 crypt(又名“descrypt”)将密码截断为 8 个字节,并且仅检查前 8 个字节以进行密码验证。

这是您直接问题的答案,但以下是您的上下文暗示的一些一般建议:

  • 幸运的是,根据我的阅读,MD5in/etc/login.defs实际上是 md5crypt ($1$),虽然它有点过时并被作者宣布弃用,但仍然远远优于基于 DES 的 crypt(并且绝对比原始的、未加盐的散列(如普通的)要好得多) MD5!大多数未加盐的散列可以在商品 GPU 上以每秒数十亿的速度破解)

  • 看起来SHA256(实际上是 sha256crypt)和SHA512(实际上是 sha512crypt)也在那里。我会选择其中之一。

  • 如果您将密码设置为password或每个方案下的某些内容,您可以直观地验证我关于它们是 -crypt 变体的结论是否正确(这里的示例取自hashcat 示例 hashes,全部为 'hashcat',有些包装为可读性):

不推荐 - 未加盐或遗留哈希类型,密码存储太“快”(破解率):

MD5         - 8743b52063cd84097a65d1633f5c74f5
SHA256      - 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
SHA512      - 82a9dda829eb7f8ffe9fbe49e45d47d2dad9664fbb7adf72492e3c81ebd3e2 \
              9134d9bc12212bf83c6840f10e8246b9db54a4859b7ccd0123d86e5872c1e5082f
descrypt    - 48c/R8JAv757A
Run Code Online (Sandbox Code Playgroud)

好的 - 比未加盐更好,没有截断,但不再足以抵抗现代硬件的蛮力:

md5crypt    - $1$28772684$iEwNOgGugqO9.bIz5sk8k/
Run Code Online (Sandbox Code Playgroud)

更好 - 具有大盐和工作因素的相对现代的哈希:

sha256crypt - $5$rounds=5000$GX7BopJZJxPc/KEK$le16UF8I2Anb.rOrn22AUPWvzUETDGefUmAV8AZkGcD
sha512crypt - $6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/
Run Code Online (Sandbox Code Playgroud)

其中,只有 descrypt 在 8 处截断。最后两个是您最好的选择。

(旁注:上述 md5crypt 和 sha512crypt 示例中的纯数字盐只是 hashcat 创建示例散列的副作用;真实、健康的盐通常来自更大的密钥空间)。

另请注意,我仅列出了此平台上 /etc/login.defs 支持的哈希类型。对于一般用途,甚至 sha256crypt 和 sha512crypt 也已被取代 - 首先是 bcrypt,然后是真正的抗并行攻击哈希,如 scrypt 和 Argon2 系列。(但是请注意,对于应该在一秒内完成的交互式登录,bcrypt 实际上比后者更能抵抗攻击)


Ala*_*n42 20

我修改了这个/etc/login.defs

PASS_MAX_LEN            8
Run Code Online (Sandbox Code Playgroud)

问题已解决。


重要补充:

我修改了上面的参数后,虽然可以设置大于8位的密码,但是还是无效,因为真正的密码只有前8位。不知道是不是我的问题。

我的最终解决方案是设置

# ENCRYPT_METHOD DES
Run Code Online (Sandbox Code Playgroud)

ENCRYPT_METHOD MD5
Run Code Online (Sandbox Code Playgroud)

/etc/login.defs

现在,我终于可以设置一个真正大于 8 的 root 密码了。

  • 很好的修复,但是对于系统默认值的原始选择很糟糕...... (16认同)
  • 您可能会考虑将其更改为 SHA256 或 SHA512 或者它们受支持 - 现在 MD5 被认为已损坏。 (9认同)
  • 我假设您现在将密码更改为超过 8 个字符的密码。您可以尝试仅使用较长密码的前 8 个字符登录吗?因为它可能只是... (8认同)
  • sha256 和 sha512 本身并不比 md5 好多少。你需要一个 salt,并使用这些算法的 crypt 版本。 (8认同)
  • @PhilippNagel 使用高熵密码,还不错。虽然 MD5 应该被认为是损坏的,但目前已知的弱点不会影响它的密码散列。密码散列的问题是速度;非迭代 MD5 速度如此之快,以至于对许多密码进行暴力破解是非常可行的。 (4认同)