Dlaczego jest wpis man w / etc / passwd

23

Zauważyłem, że w moim /etc/passwdpliku znajduje się wpis dla użytkownika man . Jaki jest cel tego użytkownika?

man:x:6:12:man:/var/cache/man:/bin/sh
Dumitru
źródło

Odpowiedzi:

31

man(polecenie, a nie użytkownik) to aplikacja pomocy. Aplikacje dostarczają strony podręcznika man w swoich pakietach, ale manmuszą wiedzieć, gdzie się znajdują, a także jaką pomoc zapewniają. Aby przyspieszyć - mannie przeszukuj całego systemu plików podczas pisania man <command>- te strony podręcznika są indeksowane do bazy danych za pomocą polecenia o nazwie mandb.

W Ubuntu mandbprzechowuje indeksy w bazie danych GNU gdbm w /var/cache/man/index.db(i kilka wersji specyficznych dla języka w tym samym katalogu). Jest to hashująca baza danych klucz-wartość, niepodobna do memcache ani setki innych implementacji podobnych pomysłów. Jest binarny, lekki i szybki. Na końcu podam przykład, jak się z tym bawić.

To indeksowanie jest uruchamiane codziennie w systemie Ubuntu przez /etc/cron.daily/man-db. Cały skrypt działa jako root i najpierw czyści, ale na samym końcu widzimy, że mandbjest uruchamiany jako manużytkownik:

# --pidfile /dev/null so it always starts; mandb isn't really a daemon,
# but we want to start it like one.
start-stop-daemon --start --pidfile /dev/null \
                  --startas /usr/bin/mandb --oknodo --chuid man \
                  $iosched_idle \
                  -- --no-purge --quiet

Nie zmienia grupy, dlatego wszystkie własności grupy /var/cache/mansą nadal rootem.

Ale dlaczego w ogóle mandbdziała jako inny użytkownik? Może (prawdopodobnie) działać równie dobrze, rootale przetwarza dane wejściowe z różnych źródeł (patrz manpath). Działający jako własny użytkownik izoluje system przed procesem wysadzenia - lub gorzej - wykorzystywanym przez zniekształcone, uszkodzone lub złośliwe strony man.

Najgorsze, co mogłoby się zdarzyć, wpłynęłoby tylko na manindeks stron. Boo Hoo. Możesz to potwierdzić za pomocą:

sudo -u man find / -writable 2>/dev/null

Możesz użyć tego podejścia, aby zobaczyć, ile szkód może wyrządzić użytkownik w systemie. Warto sprawdzić swoje uprawnienia do plików (właśnie dowiedziałem się, że każdy użytkownik może na przykład usunąć całą moją kolekcję muzyki).


Możesz zajrzeć do bazy danych za pomocą accessdb. Oto kilka losowych rekordów:

$ accessdb | shuf -n3
fpurge -> "- 3 3 1380819168 A - - gz purge a stream"
fcgetlangs -> "FcGetLangs 3 3 1402007131 A - - gz Get list of languages"
ipython -> "- 1 1 1393443907 A - - gz Tools for Interactive Computing in Python."

Chociaż powyższe nie jest do końca jasne, w rzeczywistości są tam pola rozdzielone tabulatorami:

<name> -> <ext> <sec> <mtime> <ID> <ref> <comp> <whatis> 

Więcej informacji na temat rzeczywistej zawartości pola można znaleźć w instrukcji technicznej .

Oli
źródło
3
Może możesz dodać wyjaśnienie, dlaczego ta usługa (i wiele innych) ma własnego użytkownika, a nie działa tylko jako root czy coś takiego?
Thomas Padron-McCarthy
@ ThomasPadron-McCarthy Wystarczająco dokładny?
Oli
To wspaniale!
Thomas Padron-McCarthy