Jak sprawdzić, który pakiet utworzył użytkownika?

14

Podejrzewa się, że w niektórych pakietach w czasie instalacji działają skrypty, które tworzą konta użytkowników /etc/passwd. Jak mogę sprawdzić, który pakiet utworzył określonego użytkownika?

Cyker
źródło

Odpowiedzi:

16

Będzie to działać niezawodnie, jeśli pakiet zostanie zainstalowany za pośrednictwem dpkg(w tym z apt install). Zobacz odpowiedź muru, aby uzyskać listę użytkowników utworzonych w domyślnej instalacji Ubuntu i pakiet, który je tworzy. W przypadku tych użytkowników ta metoda nie przyniesie żadnych wyników.

Możesz użyć polecenia:

grep -RlE '(adduser|useradd).*systemd' /var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'

zamień <user>na nazwę użytkownika, który Cię interesuje, na przykładsystemd

Przeszukuje on preinsti postinstskrypty wszystkich pakietów znanych dpkgdla polecenia adduserlub dla useradddanego użytkownika, aby sprawdzić, który pakiet jest odpowiedzialny za utworzenie tego użytkownika. Wynik jest przesyłany do sed, więc zwraca tylko samą nazwę pakietu zamiast pełnej nazwy pliku skryptu.

Wyjaśnienie

  • grep -RlE szukaj rekurencyjnie i drukuj tylko nazwy plików zawierających dopasowania, używaj rozszerzonych wyrażeń regularnych
  • '(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'wyszukaj polecenie adduserlub useraddoraz użytkownika, którego chcesz znaleźć w tym samym wierszu ( .*dopasuje dowolne znaki między nimi, przechwytuje dowolne opcje poleceń) w katalogu, w którym dpkgprzechowywane są skrypty, w plikach, których nazwy kończą się nainst
  • sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'usuń wszystko przed i włącznie z ostatnim /na pełnej ścieżce i / .preinstlub .postinstrozszerzeniu

Dzięki @muru za zasugerowanie ładniejszego i szybszego sposobu wyszukiwania niż używanie findtutaj :)

Zanna
źródło
Powinieneś również sprawdzić, preinstponieważ istnieją pewne pakiety tworzące użytkowników w tym skrypcie. Ale mam pomysł, więc go zaakceptuję.
Cyker,
@Cyker Tak, dziękuję :) Będę edytować ... Patrzę teraz na to, aby zobaczyć, czy uda mi się je wszystkie złapać
Zanna
grep -Rl 'adduser.*<user>' /var/lib/dpkg/info --include='*inst'dla uproszczenia find -exec grep.
muru,
dzięki @muru, który jest niesamowity ... (teraz muszę tylko basename -szaakceptować symbole wieloznaczne / regex ...), abym mógł odciąć przedrostki i przyrostki inst inst (ale nie znalazłem żadnych skryptów wstępnych z dodatkiem, więc wzruszam ramionami )
Zanna
@Zanna zaleca Politykę Debiana postinst, więc jest mało prawdopodobne, abyś znalazł takie, które używa preinst(ale przypuszczam, że rzadki przypadek może istnieć).
muru
15

Istnieje tutaj ważny wyjątek od zwykłych adduserużytkowników i grup: tych domyślnie dostarczanych z Ubuntu. Są one dostarczane przez base-passwdpakiet. Lista użytkowników i grup dodanych przez ten pakiet jest podana (i opisana) w /usr/share/doc/base-passwd/users-and-groups.{html,txt.gz}. Lista jest następująca:

Użytkownicy (zwykle z odpowiednimi grupami)

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

Grupy (bez odpowiednich użytkowników)

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

Pakiet README ( /usr/share/doc/base-passwd/README) wymienia również niektórych użytkowników z identyfikatorami UID w zakresie 60000-64999 i stwierdza, że ​​są one tworzone przez odpowiednie pakiety.

Zobacz także:

muru
źródło