Perché c'è una voce man in / etc / passwd


23

Ho notato che c'è una voce per l'utente man nel mio /etc/passwdfile. Qual è lo scopo di questo utente?

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

Risposte:


31

man(il comando, non l'utente) è un'applicazione di aiuto. Le applicazioni forniscono pagine man nei loro pacchetti, ma mandevono sapere dove si trovano e anche quale aiuto forniscono. Per velocizzare le cose - quindi mannon cercare l'intero filesystem durante la digitazione man <command>- queste pagine man sono indicizzate in un database da un comando chiamato mandb.

In Ubuntu mandbmemorizza 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 mandbviene eseguito come manutente:

# --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/mansono ancora root.

Ma perché mandbfunziona come un altro utente? Potrebbe (probabilmente) funzionare altrettanto bene, rootma 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 mansull'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 .


3
Forse potresti aggiungere una spiegazione del perché questo servizio (e molti altri) hanno il loro utente e non sono semplicemente eseguiti come root o qualcosa del genere?
Thomas Padron-McCarthy,

@ ThomasPadron-McCarthy Abbastanza approfondito?
Oli

Questo è eccellente!
Thomas Padron-McCarthy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.