我正在构建一个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:”中的“任何东西”。
答案 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