¿Por qué hay una entrada man en / etc / passwd?

23

He notado que hay una entrada para el usuario man en mi /etc/passwdarchivo. ¿Cuál es el propósito de este usuario?

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

Respuestas:

31

man(el comando, no el usuario) es una aplicación de ayuda. Las aplicaciones proporcionan páginas de manual en sus paquetes, pero mannecesitan saber dónde están y también qué ayuda brindan. Para acelerar las cosas, por lo manque no es buscar en todo el sistema de archivos cuando escribe man <command>, estas páginas man se indexan en una base de datos mediante un comando llamado mandb.

En Ubuntu mandb, los índices se almacenan en una base de datos GNU gdbm en /var/cache/man/index.db(y algunas versiones específicas del idioma en el mismo directorio). Esta es una base de datos hash de valor clave que no es diferente a memcache, o cientos de otras implementaciones sobre ideas similares. Es binario, ligero y rápido. Te daré un ejemplo de cómo jugar con él al final.

Esta indexación está programada para ejecutarse diariamente en Ubuntu por /etc/cron.daily/man-db. Todo el script se ejecuta como root y se limpia primero, pero al final vemos que mandbse ejecuta como manusuario:

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

No está cambiando el grupo, por lo que todas las propiedades del grupo /var/cache/mansiguen siendo raíz.

Pero, ¿por qué se mandbejecuta como un usuario diferente? Podría (probablemente) ejecutarse tan bien como, rootpero está procesando la entrada de una variedad de fuentes (mira manpath). Ejecutar como su propio usuario aísla el sistema del proceso que explota, o peor, de ser explotado por páginas de manual malformadas, corruptas o maliciosas.

Lo peor que podría pasar solo afectaría el maníndice de páginas. Boo hoo Puede confirmar eso con algo como:

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

Y puede usar ese enfoque para ver cuánto daño podría causar un usuario en un sistema. Es una buena idea auditar los permisos de sus archivos (acabo de descubrir que cualquier usuario puede eliminar toda mi colección de música, por ejemplo).


Puede echar un vistazo a la base de datos con accessdb. Aquí hay algunos registros aleatorios:

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

Aunque no está del todo claro por lo anterior, en realidad hay campos separados por tabulaciones allí:

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

Puede leer más sobre el contenido real del campo en el manual técnico .

Oli
fuente
3
¿Quizás podría agregar una explicación de por qué este servicio (y muchos otros) tienen su propio usuario y no solo se ejecutan como root o algo así?
Thomas Padron-McCarthy
@ ThomasPadron-McCarthy ¿Suficientemente suficiente?
Oli
Eso es excelente!
Thomas Padron-McCarthy