我正在寻找一种方法来通过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密码。