将/etc/shadow中的密码替换为用于管理目的的屏蔽文本



假设卷影文件已复制到的不同位置

sudo cp /etc/shadow ~

要检查用户是否有密码,我们只需cat即可。然而,为了不让人们担心复制他们的/etc/shadows,我需要屏蔽密码哈希。这肯定需要regex。。。。。。。

john:$6$iTEFbMTM$CXmxPwErbEef9RUBvf1zv8EgXQdaZg2eOd5uXyvt4sFzi6G4lIqavLilTQgniAHm3Czw/LoaGzoFzaMm.YwOl/:17707:0:90:14:::
jane:*:99999:0:90:14:::

有人能帮我用正则表达式替换sed或awk命令的密码哈希吗?

编辑:忘记添加密码字段为*的密码不应被替换(因为它们无论如何都不是密码(。

sed -i 's/REGEX/MASKINGTEXT/g' ~/shadow

预期结果:

john:MASKINGTEXT:17707:0:90:14:::
jane:*:99999:0:90:14:::

如果它总是第二个字段,那么为什么不通过awk只更改第二个域本身来保持简单呢。

sudo awk 'BEGIN{FS=OFS=":"} {$2="your_new_value_here"} 1' Input_file

第二条警告:根据@David sir的评论:请不要使用原地编辑,你可以在终端上打印输出,然后可以使用适当的工具编辑/创建新的/etc/shadow文件。

第一次警告:首先运行上面的命令,若您对结果满意,那个么您可以将输出保存到Input_file本身中。如果您使用的是最新版本,您也可以对上面的代码使用gawk -i inplace,将输出保存到Input_file本身中。

使用sed:

sudo cat /etc/shadow | sed -E 's/^([^:]+:)([^:]+)(..+)$/1redacted3/g'

编辑(不必要的cat命令(:

sudo sed -E 's/^([^:]+:)([^:]+)(..+)$/1redacted3/g' /etc/shadow

最新更新