首页 > 解决方案 > 出于管理目的将 /etc/shadow 中的密码替换为屏蔽文本

问题描述

鉴于影子文件已被复制到不同的位置

sudo cp /etc/shadow ~

要检查用户是否有密码,我们可以cat。但是,为了不让人们对复制他们的行为感到震惊/etc/shadows,我需要屏蔽密码哈希。这肯定需要正则表达式.......

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:::

标签: regexawksed

解决方案


如果它始终是第二个字段,那么为什么不通过仅更改第二个字段本身来保持简单awk

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

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

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


推荐阅读