Linux 在 etc/shadow 文件上设置 root 密码

Linux set root password on etc/shadow file

我正在构建一个 ram 文件系统,我生成了一个“/”目录。我想在生成的 "etc/shadow" 文件上设置默认的 root 密码。 实际文件是:

root:*:15980:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
...
.....

我想用 "root:Hashedpassword:" 替换 "root:*:",我知道用 "HASHEDPASSWORD" 替换“*”非常容易,但应该使用模式 "root:anything:",这也不难,尽管我想在这里问一下,因为它可能对其他人有用。

例如:

我要设置的密码是"centos"

盐是"xyz"

我得到了散列通行证:

pass=$(openssl passwd -1 -salt xyz centos)

然后我想用 "sed" 命令将 "root:anything:" 中的 "anything" 替换为 "root:Hashedpassword:"。

你可以用 GNU sed 来做到这一点

sed -i -e "s/^root:[^:]\+:/root:$pass:/" etc/shadow

如果 $pass 中可能有 / 个字符,您可以使用不同的分隔符,例如 , 如果不存在的话。你可以这样做:

sed -i -e  "s,^root:[^:]\+:,root:$pass:," etc/shadow

如果您没有 GNU sed,您可能没有 -i 或者它可能需要一个参数。

您也可以使用 awk 来做到这一点:

awk -F: "BEGIN {OFS=FS;} $1 == \"root\" {$2=\"$pass\"} 1" etc/shadow

如果你有最新版本的 GNU awk,你可以像这样使用 -i 来完成它:

awk -i inplace -F: "BEGIN {OFS=FS;} $1 == \"root\" {$2=\"$pass\"} 1" etc/shadow