Risposte:
man
(il comando, non l'utente) è un'applicazione di aiuto. Le applicazioni forniscono pagine man nei loro pacchetti, ma man
devono sapere dove si trovano e anche quale aiuto forniscono. Per velocizzare le cose - quindi man
non cercare l'intero filesystem durante la digitazione man <command>
- queste pagine man sono indicizzate in un database da un comando chiamato mandb
.
In Ubuntu mandb
memorizza gli indici in un database GNU gdbm su /var/cache/man/index.db
(e alcune versioni specifiche della lingua nella stessa directory). Questo è un database di hashing di valore-chiave non dissimile da memcache o un centinaio di altre implementazioni su idee simili. È binario, leggero e veloce. Presenterò un esempio di come giocarci alla fine.
Questa indicizzazione è programmata per essere eseguita quotidianamente su Ubuntu da /etc/cron.daily/man-db
. L'intero script viene eseguito come root e prima pulisce, ma alla fine vediamo che mandb
viene eseguito come man
utente:
# --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
Non sta cambiando gruppo, motivo per cui tutte le proprietà del gruppo /var/cache/man
sono ancora root.
Ma perché mandb
funziona come un altro utente? Potrebbe (probabilmente) funzionare altrettanto bene, root
ma sta elaborando l'input da una varietà di fonti (guarda manpath
). Funzionando come il suo stesso utente isola il sistema dal processo che esplode - o peggio - viene sfruttato da pagine man non corrette, corrotte o dannose.
Il peggio che potrebbe accadere influirebbe solo man
sull'indice delle pagine. Boo hoo. Puoi confermarlo con qualcosa del tipo:
sudo -u man find / -writable 2>/dev/null
E puoi usare questo approccio per vedere quanti danni un utente potrebbe causare su un sistema. È una buona idea controllare i permessi dei tuoi file (ho appena scoperto che qualsiasi utente potrebbe cancellare la mia intera raccolta musicale, per esempio).
Puoi dare un'occhiata al database con accessdb
. Ecco alcuni record casuali:
$ 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."
Sebbene non sia del tutto chiaro da quanto sopra, in realtà ci sono campi separati da tabulazione in là:
<name> -> <ext> <sec> <mtime> <ID> <ref> <comp> <whatis>
Puoi leggere ulteriori informazioni sul contenuto effettivo del campo nel manuale tecnico .