怀疑某些软件包在安装时运行了脚本,这些脚本会在 中创建用户帐户/etc/passwd
。我如何检查哪个软件包创建了特定用户?
答案1
如果软件包是通过dpkg
(包括使用apt install
) 安装的,这将相当可靠地工作。请参阅muru 的回答获取在默认 Ubuntu 安装中创建的用户列表以及创建这些用户的软件包。对于这些用户,此方法不会产生任何输出。
您可以使用以下命令:
grep -RlE '(adduser|useradd).*systemd' /var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'
替换<user>
为您感兴趣的用户的名称,例如,systemd
这将搜索已知或命令和相关用户的所有软件包的preinst
和脚本,以查看哪个软件包负责创建该用户。结果通过管道传输到 sed,因此它只返回软件包名称本身,而不是脚本文件的完整名称。postinst
dpkg
adduser
useradd
解释
grep -RlE
递归搜索并仅打印包含匹配项的文件的名称,使用扩展正则表达式'(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'
在存储脚本的目录中,在名称以 结尾的文件中,在同一行中搜索adduser
或useradd
命令和要查找的用户(将匹配它们之间的任何字符,捕获任何命令选项).*
dpkg
inst
sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'
删除/
完整路径和扩展.preinst
名之前的所有内容(包括最后一个).postinst
感谢@muru 建议一种比find
这里更简洁、更快捷的搜索方式:)
答案2
这里有一个重要的例外,即通常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
软件包 README(/usr/share/doc/base-passwd/README
)还列出了一些 UID 在 60000 到 64999 范围内的用户,并指出这些用户是由相应的软件包创建的。
另请参阅:
- Unix 和 Linux:如何找出用户属于哪个包?
base-passwd
14.04的源代码- 您可以看到文件中的用户和群组列表*.master
。