Antworten:
man
(der Befehl, nicht der Benutzer) ist eine Hilfeanwendung. Anwendungen stellen Manpages in ihren Paketen bereit, man
müssen jedoch wissen, wo sie sich befinden und welche Hilfe sie bieten. Um die man
Suche 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 mandb
werden 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, mandb
dass es als man
Benutzer 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/man
immer noch root sind.
Aber warum läuft überhaupt mandb
ein 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 man
Seitenindex 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 .