Respuestas:
man
(el comando, no el usuario) es una aplicación de ayuda. Las aplicaciones proporcionan páginas de manual en sus paquetes, pero man
necesitan saber dónde están y también qué ayuda brindan. Para acelerar las cosas, por lo man
que 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 mandb
se ejecuta como man
usuario:
# --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/man
siguen siendo raíz.
Pero, ¿por qué se mandb
ejecuta como un usuario diferente? Podría (probablemente) ejecutarse tan bien como, root
pero 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 .