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
(可能であれば後者が優先されます)。preinst
postinst
パッケージマネージャは、事前依存性preinst
である限り使用することができます。adduser
base-passwd
このポリシーは、前の段落で述べたように、別のアカウントソースであるpackagesにもリンクされています。
静的に割り当てられたIDが必要な場合は、管理者にユーザーまたはグループIDを要求する必要があり、
base-passwd
パッケージが割り当てられるまでパッケージをリリースしないでください。 1つが割り当てられたら、パッケージがbase-passwd
orのIDを持つパッケージのバージョンに依存するようにするか、パッケージがorの正しいIDを使用してユーザーまたはグループ自体を作成するように準備する必要があります。 (可能であればこれを行うのが最善です。そうでない場合は、事前にadduserパッケージに依存する必要があります。)/etc/passwd
/etc/group
adduser
preinst
postinst
postinst
文書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
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