希望扩展问题here,关于找到空密码的用户。我想要的是过滤掉行
的系统帐户sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1
在我运行时打印出来。
我的问题是,我希望能够只显示用户帐户,这些帐户的密码是由我的系统中的脚本或终端添加的,a.k.a。" real"人们,以及我自己制作的帐户。
现在发生了什么:
~$ sudo useradd bob
~$ sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1
Sudo password for user: [pw]
daemon
bin
sys
[...]
rtkit
saned
usbmux
bob
~$
什么是期望:
~$ sudo useradd bob
~$ sudo [getent command for the problem]
Sudo password for user: [pw]
bob
~$
换句话说,当我在没有密码的情况下添加Bob时,我希望能够只看到他。
这可能不措辞好,所以请进一步澄清。
用于此目的是查找具有所述属性的所有用户并删除它们。因此,我不想删除系统创建的帐户。
更新1:更正了拼写错误。
更新2 :我发现我可以按其ID过滤掉所有用户,这是getent
收到的第三个字段。
因此,通过管道运行2 grep,如下所示:
sudo getent shadow | grep '^[^:]*:.\?:' | grep (regex) | cut -d: -f1
将完成工作。
现在,我理解我应该使用的正则表达式是'.:.:[^(17212)]:.:.:.:.:.:.'
,但它不会带回任何匹配。
有人可以提出任何替代方案吗?
我使用Ubuntu 16.04。
感谢您的帮助。
答案 0 :(得分:0)
用户帐户ID从1000开始,较低的ID属于系统帐户,因此您需要过滤掉那些 - id是输出的第三个字段
> getent passwd
答案 1 :(得分:0)
使用以下内容:
sudo getent shadow | awk -F ':' '{print $1 \" \"$2 \" \" $3}
与脚本中的自定义解析器结合使我能够在应用程序内的列表中获取所有具有空密码的用户帐户。
然后,使用17212属性,我可以分辨用户帐户中的系统帐户。
请注意,这种从用户帐户告知系统帐户的方式可能对您不起作用。 (在评论中归功于@MirMasej)