如何查出用户属于哪个包?

如何查出用户属于哪个包?

在 Linux 发行版中,某些软件包会创建用户帐户。

如何确定哪个包创建了给定用户?

我想专门了解 Fedora 和 Ubuntu,但也欢迎其他发行版的答案。

答案1

在基于 Debian 的系统(包括 Ubuntu)上,软件包使用以下命令创建用户维护者脚本, 通常postinst。因此,一种方法是 grep 这些脚本:

grep -R --include='*.postinst' -e useradd -e adduser /var/lib/dpkg/info/

当然,这是假设该postinst脚本尚未被删除(手动删除或因为您卸载了相关软件包)。


Debian 政策似乎赞成postinst

[Y]您必须安排您的程序包在必要时在或脚本adduser中创建用户或组(同样,如果可能的话,后者是首选)。preinstpostinst

包维护者preinst也可以使用,只要adduser是预依赖项。

该政策还引导我们找到账户的另一个来源:套餐base-passwd,正如前一段所述:

如果您需要静态分配的 ID,则必须向维护者索要用户或组 ID base-passwd,并且在分配给您之前不得释放软件包。一旦您被分配了一个,您必须使包依赖于或base-passwd中存在 id 的包版本,或者安排您的包创建用户或组本身,并在其或中使用正确的 id(使用)。 (如果可能的话,最好在 中执行此操作,否则需要预先依赖 adduser 包。)/etc/passwd/etc/groupadduserpreinstpostinstpostinst

文档base-passwd/usr/share/doc/base-passwd/users-and-groups.txt.gz/usr/share/doc/base-passwd/users-and-groups.html)说:

The Debian base-passwd package contains the master versions of /etc/passwd and
/etc/group. The update-passwd tool keeps the entries in these master files in
sync on all Debian systems. They comprise only "global static" ids: that is,
those which are reserved globally for the benefit of packages which need to
include files owned by those users or groups, or need the ids compiled into
binaries. 

包含的用户/组是(从 中删除/usr/share/doc/base-passwd/users-and-groups.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 范围内的用户,并声明这些用户是由相应的包创建的。

答案2

据我所知,没有本地包管理器功能可以创建(或删除)这些功能/系统用户,而是在 RPM 包中的自定义安装前或安装后脚本部分中完成。

通常,RPM 包将创建并声明这些用户的主目录的所有权,例如,该httpd包创建用户 apache,而 apache 用户的主目录由 httpd 包拥有,从而允许以迂回的方式查找该包:

rpm -qf /var/www

您可以验证 httpd 包是否确实可以使用以下命令创建 apache 用户:

rpm -q --scripts httpd

答案3

useradd对于使用 rpm 的系统,这将列出其脚本中使用的所有包

rpm -qa | xargs -n1 -I % sh -c 'echo %; rpm -q --scripts % | grep useradd' | grep useradd -B 1

使用相同的命令,我们可以通过将useradd命令替换为搜索到的用户来搜索目标用户...

这里需要注意的是,许多包/应用程序在运行时都会创建其用户,因此此命令不会识别其用户。

答案4

警告:这是一种粗略的方法,可能不适用于包创建的所有用户。

大多数创建用户的包将在 /home 之外创建这些用户的主目录,并且大多数时候他们的主目录将是包的一部分。在这种情况下,您可以在rpm -qf此类用户的主目录中找到该包。

用户ntp

[root@secapp01 ~]# grep ntp /etc/passwd
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@secapp01 ~]# rpm -qf /etc/ntp
ntpdate-4.2.6p5-1.el6.x86_64

用户postfix

[root@secapp01 ~]# grep postfix /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@secapp01 ~]# rpm -qf /var/spool/postfix
postfix-2.6.6-6.el6_5.x86_64

相关内容