如何检查创建用户的包?

怀疑某些软件包在安装时运行脚本,这些脚本在/etc/passwd创建用户帐户。 如何查看创建特定用户的软件包?

如果通过dpkg安装软件包(包括使用apt install ),这将合理可靠地工作。 请参阅muru的答案,了解在默认Ubuntu安装中创建的用户列表以及创建它们的包。 对于这些用户,此方法不会产生任何输出。

您可以使用以下命令:

 grep -RlE '(adduser|useradd).*systemd' /var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-az]+inst:\1:' 

替换为您感兴趣的用户的名称,例如systemd

这将搜索dpkg已知的所有软件包的preinstpostinst脚本中的adduseruseradd命令以及相关用户,以查看哪个软件包负责创建该用户。 结果通过管道传输给sed,因此它只返回包名本身而不是脚本文件的全名。

说明

  • grep -RlE递归搜索并仅打印包含匹配项的文件名,使用扩展正则表达式
  • '(adduser|useradd).*' /var/lib/dpkg/info --include='*inst'搜索adduseruseradd命令以及要在同一行上找到的用户( .*将在dpkg存储脚本的目录中匹配它们之间的任何字符,捕获任何命令选项,在名称以inst结尾的文件中
  • sed -r 's:.*/(.*)\.[-az]+inst:\1:'剥离完整路径中的最后一个/之前的所有内容以及.preinst.postinst扩展名

感谢@muru建议更简洁,更快捷的搜索方式,而不是使用find here 🙂

通常的adduser添加的用户和组有一个重要的例外:默认情况下Ubuntu附带的用户和组。 这些由base-passwd包提供。 在/usr/share/doc/base-passwd/users-and-groups.{html,txt.gz}给出(并描述)此程序包添加的用户和组的列表。 清单是:

用户(通常带有相应的组)

 root man majordom irc gdm daemon lp postgres gnats saned bin mail www-data nobody klog sys news backup messagebus syslog sync uucp operator postfix games proxy list haldaemon 

组(没有相应的用户)

 adm fax audio staff sshd tty voice src users fetchmail disk cdrom shadow lpadmin cupsys kmem floppy utmp sasl nogroup dialout tape video scanner dip sudo plugdev ssh 

自述/usr/share/doc/base-passwd/README包README( /usr/share/doc/base-passwd/README )还列出了一些具有60000-64999范围内UID的用户,并声明这些用户是由相应的包创建的。

另见:

  • Unix和Linux:如何找出用户所属的软件包?
  • base-passwd for 14.04的源代码 – 您可以在*.master文件中看到用户和组的列表。