我想更改 中用户的密码/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 的密码sed
吗awk
?
答案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命令。如果可能,在完成之前不要将系统连接到网络上。