从文件 /etc/shadow 显示用户“ironman”的加密字符串

从文件 /etc/shadow 显示用户“ironman”的加密字符串

我创建了一个用户,我想从 /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。

请注意,散列密码最终可能会被破解。除了设置密码的用户和系统管理员之外,其他人都可以看到散列密码,请更改这些密码。

相关内容