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 密码了。