Por que existe uma entrada man no / etc / passwd

23

Percebi que há uma entrada para o usuário man no meu /etc/passwdarquivo. Qual é o objetivo deste usuário?

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

Respostas:

31

man(o comando, não o usuário) é um aplicativo de ajuda. Os aplicativos fornecem páginas de manual em seus pacotes, mas manprecisam saber onde eles estão e também que ajuda eles fornecem. Para acelerar as coisas - portanto, mannão é procurar o sistema de arquivos inteiro quando você digita man <command>- essas páginas de manual são indexadas em um banco de dados por um comando chamado mandb.

No Ubuntu, mandbarmazena índices em um banco de dados GNU gdbm em /var/cache/man/index.db(e algumas versões específicas do idioma no mesmo diretório). Este é um banco de dados de hash de valor-chave que não é diferente do memcache ou de centenas de outras implementações em idéias semelhantes. É binário, leve e rápido. Vou dar um exemplo de como jogar com ele no final.

Esta indexação está programada para ser executada diariamente no Ubuntu por /etc/cron.daily/man-db. Todo o script é executado como root e faz algumas limpezas primeiro, mas logo no final vemos mandbcomo sendo executados man:

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

Não está mudando de grupo, e é por isso que todas as propriedades do grupo /var/cache/manainda são raiz.

Mas por que é mandbexecutado como um usuário diferente? Poderia (provavelmente) funcionar tão bem quanto, rootmas está processando entradas de várias fontes (veja manpath). A execução como seu próprio usuário isola o sistema do processo que está explodindo - ou pior -, sendo explorado por páginas de manual malformadas, corrompidas ou mal-intencionadas.

O pior que poderia acontecer afetaria apenas o maníndice de páginas. Boo hoo. Você pode confirmar isso com algo como:

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

E você pode usar essa abordagem para ver quanto dano um usuário poderia causar em um sistema. É uma boa ideia auditar suas permissões de arquivo (acabei de descobrir que qualquer usuário pode excluir toda a minha coleção de músicas, por exemplo).


Você pode espiar o banco de dados com accessdb. Aqui estão alguns registros aleatórios:

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

Embora não esteja totalmente claro a partir do exposto, na verdade existem campos separados por tabulações:

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

Você pode ler mais sobre o conteúdo real do campo no manual técnico .

Oli
fonte
3
Talvez você possa adicionar uma explicação de por que esse serviço (e muitos outros) têm seu próprio usuário e não são apenas executados como root ou algo assim?
Thomas Padron-McCarthy
@ ThomasPadron-McCarthy Completa o suficiente?
Oli
Isso é excelente!
Thomas Padron-McCarthy