从脚本更改root密码

时间:2012-06-28 11:07:18

标签: linux bash shell passwords

我正在寻找一种通过bash脚本在Linux系统上更改root用户密码的方法,而无需启动系统。到目前为止我发现的唯一的事情是删除密码,或使用chroot,我不想使用。
我知道如何清空root密码,但我需要将其更改为脚本中先前定义的其他密码。
我有root访问整个文件系统。
系统使用影子密码,有没有办法生成加密的影子密码而无需登录/ chrooting?
是否有其他方法可以从脚本中更改root密码?

2 个答案:

答案 0 :(得分:8)

密码哈希在/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 $列表中)。

答案 1 :(得分:-1)

按OS选择菜单屏幕中的Ubuntu选项卡上的e。 按以下步骤更新命令

rw init=/bin/bash

它将删除linux root shell。 只需输入名为passwd root的命令即可更改root密码。