当我尝试设置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
答案1
这是因为基于 DES 的加密(又称为“descrypt”)将密码截断为 8 个字节,并且仅检查前 8 个字节以进行密码验证。
这是对您的直接问题的回答,但这里有一些根据您的上下文暗示的一般建议:
幸运的是,从我的阅读来看,
MD5
实际上/etc/login.defs
是 md5crypt ($1$),虽然有点过时并被其作者声明为弃用,仍然远远优于基于 DES 的加密(和确实比原始的、无盐哈希(如纯 MD5)好得多!大多数无盐哈希可以在商用 GPU 上以每秒 10 ...十亿每秒)看起来
SHA256
(实际上是 sha256crypt) 和SHA512
(实际上是 sha512crypt) 也在那里。我会选择其中之一。如果你将每个方案下的密码设置为
password
或 ,你可以通过视觉验证我的结论是否正确,即它们是 -crypt 变体(这里的例子取自hashcat 示例哈希,全部为“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 实际上比后者更能抵抗攻击)
答案2
我修改了它/etc/login.defs
:
PASS_MAX_LEN 8
问题已解决。
重要补充:
我改了上述参数之后,虽然可以设置大于8位的密码,但是还是无效,因为真正的密码只有前八位,不知道是不是我的问题。
我的最终解决方案是设置
# ENCRYPT_METHOD DES
到
ENCRYPT_METHOD MD5
在/etc/login.defs
。
现在,我终于可以设置一个真正大于八位的root密码了。