사용자가 어떤 패키지에 속해 있는지 확인하는 방법은 무엇입니까?

사용자가 어떤 패키지에 속해 있는지 확인하는 방법은 무엇입니까?

Linux 배포판에서 일부 소프트웨어 패키지는 사용자 계정을 생성합니다.

특정 사용자를 생성한 패키지를 확인하는 방법은 무엇입니까?

Fedora와 Ubuntu에 대해 구체적으로 알고 싶지만 다른 배포판에 대한 답변도 환영합니다.

답변1

Debian 기반 시스템(Ubuntu 포함)에서 패키지는 다음 명령을 사용하여 사용자를 생성합니다.관리자 스크립트, 대개 postinst. 따라서 한 가지 방법은 다음 스크립트를 grep하는 것입니다.

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

물론 이는 postinst스크립트가 제거되지 않았다고 가정합니다(수동으로 또는 관련 패키지를 제거했기 때문에).


데비안 정책선호하는 것 같습니다 postinst:

[Y]필요할 때 스크립트 내에서 또는 스크립트에서 사용자 또는 그룹을 생성하도록 패키지를 준비해야 합니다 adduser(역시 가능하면 후자가 선호됩니다).preinstpostinst

패키지 관리자는 사전 종속성 preinst인 한 이를 사용할 수도 있습니다 .adduser

base-passwd또한 이 정책은 이전 단락에서 언급한 것처럼 또 다른 계정 소스인 packages 로 연결됩니다 .

정적으로 할당된 ID가 필요한 경우 관리자에게 사용자 또는 그룹 ID를 요청해야 하며 base-passwd, 패키지가 할당될 때까지 패키지가 릴리스되어서는 안 됩니다. 하나를 할당받은 후에는 패키지가 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

관련 정보