更改脚本的root密码

我正在寻找一种方法来通过bash脚本在Linux系统上更改root用户的密码,而无需启动系统。 到目前为止我发现的唯一的事情是要么删除密码,要么使用chroot,我不喜欢使用。
我知道如何清空root密码,但是我需要将其更改为脚本前面定义的不同密码。
我有对整个文件系统的root权限。
系统是使用影子密码,有没有办法生成一个encryption的影子密码没有login/ chrootting?
任何其他方式来改变脚本的根密码?

密码哈希在/etc/shadow 。 你可以简单地用一个生成的(腌制的)散列替换它。 crypt(3)中描述了密码散列的格式。 默认是DES,但是在glibc2系统上可以包含几种不同的加密方法之一:

 ID | Method --------------------------------------------------------- 1 | MD5 2a | Blowfish (not in mainline glibc; added in some | Linux distributions) 5 | SHA-256 (since glibc 2.7) 6 | SHA-512 (since glibc 2.7) 

所以一个影子密码字符串可能看起来像这样: $5$saltysalt$KhboodWTnuXJ5siXvWx5mxYXbnuNJOxROfD1inCILfD

在这种情况下,第一个$ 5 $部分表示这是一个SHA-256散列,中间部分是盐,其余部分是实际散列。

要生成一个,最好使用系统的crypt(3)函数,例如用一个最小的C程序:

 #include <stdio.h> #include <crypt.h> int main(int argc, char *argv[]) { printf("%s\n", crypt(argv[1], argv[2])); } 

cc mkpass.c -o mkpass -lcrypt编译,然后用明文密码和salt字符串运行,生成一个可以放入/etc/shadow的字符串:

 ./mkpass yourpassword yoursalt # DES (default) ./mkpass yourpassword '$6$yoursalt$encrypted' # SHA-512 (quote your $) 

旧的Linux系统可能不支持第二种形式。 最好查看影子文件中的现有字符串,并使用相同的哈希类型(从顶部的$ id $列表中)。

在操作系统选择菜单屏幕的Ubuntu选项卡上按下e 。 更新命令如下

 rw init=/bin/bash 

它会放弃你的Linux根shell。 只需输入名为passwd root的命令即可更改您的root密码。