更改 /etc/shadow 中用户的密码

更改 /etc/shadow 中用户的密码

我想更改 中用户的密码/etc/shadow。我不能使用密码更改程序,例如passwd.必须通过编辑/etc/shadow.该文件/etc/shadow位于已安装的硬盘驱动器上,并且 chroot 不起作用。

例如:

root:$asdf.1AH.MJ3sivd4$YFoFnasdf4cZW9H6G6cbT4.1VBmasdfmv.a0wCU/i3zEFasdfasdf4W.:15843:0:99999:7:::
otheruser:$asdf.1AH.MJ3sivd4$YFoFnasdf4cZW9H6G6cbT4.1VBmasdfmv.a0wCU/i3zEFasdfasdf4W.:15843:0:99999:7:::

有人可以给我提供一个 shell 脚本来更改 root 的密码sedawk

答案1

如果空密码对您来说不是问题,最简单的解决方案是更改文件/etc/passwd而不是/etc/shadow.

该文件的示例行/etc/passwd是:

root:x:0:0:root:/root:/bin/bash

此行中的“x”表示密码实际上以散列形式存储在影子文件中。您可以做的一件事就是像这样删除它:

root::0:0:root:/root:/bin/bash

然后您实际上可以使用用户名root和空密码登录。

如果您不想将 root 用户的密码留空,则在删除 root 密码后,更改为 root 用户:

user@machine$ su root
password: [blank]

然后执行命令修改root密码:

root@machine# passwd
New password: [desired password]
Retype new password: [desired password]

现在您已经知道了 root 的密码。

答案2

您可以使用 mkpasswd 工具来执行此操作。 cyberciti.biz 上有一篇关于如何使用它的很好的入门指南,标题为:Linux / UNIX:使用 mkpasswd 生成随机密码

例子

mkpasswd --char=10 --crypt-md5

通常会调用包makepasswd,但通常会调用工具mkpasswd

请参阅手册页更多细节。

/etc/shadow直接生成内容

以下 python 命令将生成进入文件的部分/etc/shadow

Python

$ python -c "import crypt, getpass, pwd; \
         print crypt.crypt('password', '\$6\$SALTsalt\$')"

珀尔

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'

生成以下输出:

$6$SALTsalt$UiZikbV3VeeBPsg8./Q5DAfq9aj7CVZMDU6ffBiBLgUEpxv7LMXKbcZ9JSZnYDrZQftdG319XkbLVMvWcF/Vr/

更改/etc/shadow

这是一个命令,它将使用上面命令中新生成的密码字段更改现有条目。

perl -pe 's|(root):(\$.*?:)|\1:\$6\$SALTsalt\$UiZikbV3VeeBPsg8./Q5DAfq9aj7CVZMDU6ffBiBLgUEpxv7LMXKbcZ9JSZnYDrZQftdG319XkbLVMvWcF/Vr/:|' /etc/shadow > /etc/shadow.new

笔记:这是一个粗略的例子,但是可行。您需要从生成哈希密码的命令中获取结果,并使用斜杠 (\$) 转义美元符号 ($)。

结果存储在新文件 /etc/shadow.new 中。确认结果后,您可以/etc/shadow用新文件替换/etc/shadow.new.

答案3

将/etc/shadow中的用户密码全部删除,启动系统,无密码登录,然后使用passwd命令。如果可能,在完成之前不要将系统连接到网络上。

相关内容