我可以在下面看到内容/etc/shadow
。 root密码的哈希算法是md5,但测试用户的哈希算法是sha512:
root:$1$RjnJa1j6$.HbXUfxVzGSSAgSvz52Zm1:19251:0:99999:7:::
.
.
.
test:$6$6myiVypQtv/A31gF$totJgATLtEnHGHNuDdgRDVyhAOoI3s1xYQ5Cw1DqhjQ4UKC.brqRGSP/GMJ.KpZ079Rqm6KaPG6IhoiwocELY1:0:0:99999:7:::
我检查了以下设置/etc/login.defs
:
ENCRYPT_METHOD SHA512
和/etc/pam.d/system-auth
:
password sufficient pam_unix.so nullok sha512 shadow try_first_pass try_authtok
两个文件中,算法都设置为sha512,那为什么是root的md5呢?
是否可以在不使用命令的情况下将 root 的默认密码哈希算法设置为 sha512 passwd
?
谢谢!
答案1
第一个问题的答案很有可能是——遗留系统。旧系统,更新过多次,原来使用md5
,当前版本使用,sha
所以更新过程不更改密码,因为(见下段)。
您无法将一种哈希值转换为另一种哈希值,因为根据定义,哈希值是一种加密方式。因此,您不知道纯文本(当使用加密密码时也使用盐),因此您无法(轻松)创建root
密码的哈希值。
正如评论中提到的:使用passwd
答案2
是否可以在不使用 passwd 命令的情况下将 root 默认密码设置为算法 sha512?
理论上可以通过菊花链来“转换”哈希值。
因此,您将存储旧哈希值的新哈希值;但此时您将在不知道原始明文密码的情况下存储新的哈希值。因此,为了验证给定的密码,您必须首先计算旧哈希,然后根据新哈希检查旧哈希,而不是直接根据新哈希检查密码。
一些网络应用程序在不得不以任何方式迁移非加盐 md5 哈希值时使用了这种方法。考虑到他们有很多用户多年没有再次登录(如果有的话),并且也无法通过他们的(通常是过时的)邮件地址联系到他们。
因此,理论上可以对用户密码实现相同的功能,但是 - 我不知道它是否存在于任何地方。这有点深奥而且不值得。
只需设置一个新密码即可。每次设置哈希/盐时,即使明文密码保持不变,您也会得到一个新的哈希/盐。
答案3
如何在 Linux 上将默认 root 算法设置为 sha512?
一方面我相信这可能是特定于 Linux 发行版的,更重要的是版本。根据 google 的说法,SHA512 于 2001 年推出。我的问题是您使用的 Linux 发行版和版本是什么?因为在 RHEL 7.9 中我的 root 密码是SHA512'd就像我所有的用户帐户一样。
https://man7.org/linux/man-pages/man5/login.defs.5.html
ENCRYPT_METHOD - 这只影响组密码的生成。用户密码的生成由 PAM 完成并受 PAM 配置的约束。建议将此变量设置为与 PAM 配置一致。
MD5_CRYPT_ENAB - 该变量已弃用。您应该使用 ENCRYPT_METHOD。 如果您运行的是现代 Linux 发行版,则很可能已被弃用。
另一方面,如果您运行的是现代 Linux 发行版,并且您的 root 密码是根据$1$
id进行 MD5 哈希处理/etc/shadow
,而其他密码是根据 id 进行 SHA512加密$6
,那么这是一个安全危险信号。
sha512
in的设置pam.d
告诉passwd
命令要生成什么后续哈希值,这完全独立于当前存在于 中的哈希值/etc/shadow
。任何有权这样做的人都可以使 root 密码或任何其他密码具有当前 pam 未指定的任何类型的哈希值,system-auth
并且password-auth
您基本上应该确保您的login.defs
和pam.d
文件指定 SHA512 以及$6$
在/etc/shadow
.