我创建了一个用户,我想从 /etc/shadow 中为该用户加密一个字符串。我该怎么做
答案1
对用户密码进行散列处理是单向操作,您可以对纯文本密码进行散列并接收散列值。
但是,从给定的哈希值,您无法以纯文本形式恢复原始密码。
另外,如果两个密码具有相同的哈希值,则它们是相同的,但由于盐,不同的哈希值并不能保证密码不同。
话虽如此,要查看给定纯文本密码的哈希值,您可以
- 创建测试用户(
sudo useradd test
), - 然后更改密码(
sudo passwd test
), /etc/shadow
检查(sudo grep test /etc/shadow
)中写入的哈希值- 最后出于安全原因删除新创建的用户(
sudo userdel test
)
最好在离线服务器上执行此操作,以便测试用户存在已知或简单密码的短时间不会被用来危害系统。
答案2
有多种方法可以做到这一点。如果你有 getent -
sudo getent shadow username | cut -f2 -d:
- Sudo——以 root 身份运行——我们需要以 root 身份读取影子密码。
- getent shadow username - 获取影子密码中的用户名
- cut -f 2 -d:" 获取制表符分隔文件中的第二个字段,即加密密码。
如果你没有 getent,你可以使用 grep
sudo grep "^username:" /etc/shadow | cut -f2 -d":"
这里的想法是使用 grep 来获取所需的行,其效果与 getent 类似。用户名前的“^”表示该行需要以用户名开头。末尾的“:”是字段分隔符。因此,如果您有多个相似的用户,则只有 1 个会匹配。(即 myusername 和 username4me 不会匹配)。
答案3
glibc 有一个用于此的程序:
getent shadow ironman
输出包含哈希密码的分隔字符串。需要以特权身份运行。即使用户不在文件中,而是在 LDAP 之类的环境中,也可以工作,具体取决于 nsswitch.conf。
请注意,散列密码最终可能会被破解。除了设置密码的用户和系统管理员之外,其他人都可以看到散列密码,请更改这些密码。