Warum gibt es einen man-Eintrag in / etc / passwd?

23

Ich habe festgestellt, dass in meiner /etc/passwdDatei ein Eintrag für den Benutzer man vorhanden ist . Was ist der Zweck dieses Benutzers?

man:x:6:12:man:/var/cache/man:/bin/sh
Dumitru
quelle

Antworten:

31

man(der Befehl, nicht der Benutzer) ist eine Hilfeanwendung. Anwendungen stellen Manpages in ihren Paketen bereit, manmüssen jedoch wissen, wo sie sich befinden und welche Hilfe sie bieten. Um die manSuche zu beschleunigen und nicht das gesamte Dateisystem zu durchsuchen, werden man <command>diese Manpages durch einen aufgerufenen Befehl in einer Datenbank indiziert mandb.

In Ubuntu mandbwerden Indizes in einer GNU-Datenbank unter gdbm gespeichert /var/cache/man/index.db(und einige sprachspezifische Versionen im selben Verzeichnis). Hierbei handelt es sich um eine Schlüsselwert-Hashing-Datenbank, die nicht unähnlich zu Memcache ist, oder um hundert andere Implementierungen mit ähnlichen Ideen. Es ist binär, leicht und schnell. Ich werde am Ende ein Beispiel einbringen, wie man damit spielt.

Diese Indizierung soll täglich in Ubuntu von ausgeführt werden /etc/cron.daily/man-db. Das gesamte Skript wird als root ausgeführt und bereinigt zuerst. Am Ende sehen wir jedoch, mandbdass es als manBenutzer ausgeführt wird:

# --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

Es ändert sich nicht die Gruppe, weshalb alle Gruppeneigentümer /var/cache/manimmer noch root sind.

Aber warum läuft überhaupt mandbein anderer Benutzer? Es könnte (wahrscheinlich) genauso gut laufen root, verarbeitet aber Eingaben aus einer Vielzahl von Quellen (siehe manpath). Die Ausführung als eigener Benutzer schützt das System vor dem Hochfahren - oder noch schlimmer - und kann von fehlerhaften, beschädigten oder böswilligen Manpages ausgenutzt werden.

Das Schlimmste, was passieren könnte, würde sich nur auf den manSeitenindex auswirken . Boo hoo. Sie können das mit so etwas wie bestätigen:

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

Auf diese Weise können Sie feststellen, wie viel Schaden ein Benutzer auf einem System anrichten kann. Es ist eine gute Idee, Ihre Dateiberechtigungen zu überprüfen (ich habe gerade herausgefunden, dass jeder Benutzer beispielsweise meine gesamte Musiksammlung löschen kann).


Mit können Sie einen Blick in die Datenbank werfen accessdb. Hier sind ein paar zufällige Datensätze:

$ 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."

Obwohl dies nicht ganz klar ist, gibt es dort tatsächlich durch Tabulatoren getrennte Felder:

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

Weitere Informationen zu den Feldinhalten finden Sie im technischen Handbuch .

Oli
quelle
3
Vielleicht könnten Sie eine Erklärung hinzufügen, warum dieser Dienst (und viele andere) einen eigenen Benutzer hat und nicht nur als root oder so ausgeführt wird?
Thomas Padron-McCarthy
@ ThomasPadron-McCarthy Genug?
Oli
Das ist ausgezeichnet!
Thomas Padron-McCarthy