2017-03-22 46 views
0

希望扩大询问here的问题,关于查找空密码的用户。我要的是过滤掉系统占该行如何找到空密码的“真实用户”帐户?

sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1 

打印出来,当我运行它。

我的问题是,我希望能够只显示脚本或通过终端在我的系统中添加空密码的用户帐户,即“真实”的人,以及我已经拥有的帐户使自己。

深入:

会发生什么现在

~$ 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 
~$  

换句话说,当我添加鲍勃没有密码,我想只能看到他。

这可能是不是措辞得当,所以请进一步澄清。

这样做的用途是找到具有上述属性的所有用户并删除它们。因此,我不想删除系统创建的帐户。


更新1:更正错别字。


更新2:我发现我可以通过它们的ID,这是通过接收getent第三场过滤掉所有用户。

因此,运行2的grep虽然管道,如:

sudo getent shadow | grep '^[^:]*:.\?:' | grep (regex) | cut -d: -f1 

将完成这项工作。

现在,我明白我应该使用的正则表达式是'.:.:[^(17212)]:.:.:.:.:.:.',但它不会带回任何匹配。

有人可以提出任何替代方案吗?


我使用Ubuntu 16.04。

谢谢你的帮助。


回答

0

案例的输出解决了第三场:

使用下列内容:

sudo getent shadow | awk -F ':' '{print $1 \" \"$2 \" \" $3} 

与脚本中的自定义分析器结合使我能够在应用程序内的列表中获得具有空密码的所有用户帐户。

然后,使用17212属性,我可以区分用户帐户中的系统帐户。

被警告,这种从用户帐户告知系统帐户的方式可能对您无效。 (在评论中称为@MirMasej)

0

用户帐户ID 1000开始,低ID属于系统帐户,所以你需要过滤那些出来 - ID是

> getent passwd 
+0

我把cut命令关掉以查看所有字段 - 系统会话有id 17212,而“Bob”有17247。“1000”限制是正确的,还是应该只限制在我的情况下,17212和更低? –

+0

分配给用户与系统帐户的数字用户ID的集合可能因系统而异。 –

+0

@KeithThompson我确实认识到这是惯例,但我不记得它不会被保留的情况。显然这是这种情况。 – MirMasej

相关问题