ユーザーがどのパッケージに属しているかを確認する方法は?

ユーザーがどのパッケージに属しているかを確認する方法は?

Linuxディストリビューションでは、一部のソフトウェアパッケージはユーザーアカウントを作成します。

特定のユーザーを作成したパッケージを確認するには?

FedoraとUbuntuについて具体的に知りたいのですが、他のディストリビューションへの答えも大歓迎です。

答え1

Debianベースのシステム(Ubuntuを含む)では、パッケージは次のコマンドを使用してユーザーを作成します。管理者スクリプト、通常postinst。したがって、1つの方法は、次のスクリプトをgrepすることです。

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

もちろん、これはpostinstスクリプトが削除されていないと仮定します(手動でまたは関連パッケージを削除したため)。


Debian ポリシー好むようですpostinst

[Y]必要に応じて、スクリプト内またはスクリプトからユーザーまたはグループを作成するようにパッケージを準備する必要がありますadduser(可能であれば後者が優先されます)。preinstpostinst

パッケージマネージャは、事前依存性preinstである限り使用することができます。adduser

base-passwdこのポリシーは、前の段落で述べたように、別のアカウントソースであるpackagesにもリンクされています。

静的に割り当てられたIDが必要な場合は、管理者にユーザーまたはグループIDを要求する必要があり、base-passwdパッケージが割り当てられるまでパッケージをリリースしないでください。 1つが割り当てられたら、パッケージがbase-passwdorのIDを持つパッケージのバージョンに依存するようにするか、パッケージがorの正しい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)には、60000〜64999の範囲のUIDを持つ一部のユーザーがリストされており、これらのユーザーがそのパッケージによって生成されたことを示しています。

答え2

私が知る限り、これらの機能/システムユーザーを作成(または削除)するデフォルトのパッケージマネージャ機能はなく、代わりにRPMパッケージのカスタムプレインストールまたはインストール後スクリプトセクションで実行されます。

一般に、RPM パッケージは、これらのユーザーのホームディレクトリの所有権を生成して主張します。たとえば、httpdパッケージはユーザー apache を生成し、Apache ユーザーのホームディレクトリは httpd パッケージが所有しているため、バイパス方法でパッケージを見つけることができます。

rpm -qf /var/www

httpdパッケージが実際にApacheユーザーを作成できることを確認するには、次のようにします。

rpm -q --scripts httpd

答え3

useraddrpmを使用するシステムの場合、スクリプトで使用されているすべてのパッケージが一覧表示されます。

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

関連情報