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
我正在构建一个 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