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

时间:2015-05-29 16:33:30

标签: regex linux sed passwords root

我正在构建一个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:*:”替换为“root:Hashedpassword:”,我知道用“HASHEDPASSWORD”替换“*”非常容易,但它应该使用“root”模式完成:任何东西:“,这也不应该是困难的,即使 - 虽然我想在这里询问它,因为它可能对其他人有用。

例如:

我想设置的密码是“centos”

盐是“xyz”

我得到了哈希传球:

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

然后我想用“root:Hashedpassword:”和“sed”命令替换“root:anything:”中的“任何东西”。

1 个答案:

答案 0 :(得分:3)

你可以用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