Por que existe uma entrada man em / etc / passwd?

23

Eu notei que há uma entrada para o usuário man no meu arquivo /etc/passwd . Qual é o objetivo deste usuário?

man:x:6:12:man:/var/cache/man:/bin/sh
    
por Dumitru 18.08.2014 / 11:02

1 resposta

31

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

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

Esta indexação está agendada para ser executada diariamente no Ubuntu por /etc/cron.daily/man-db . O script inteiro é executado como root e faz algumas limpezas primeiro, mas no final vemos mandb sendo executado como o man user:

# --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 posses do grupo em /var/cache/man ainda são raiz.

Mas por que mandb é executado como um usuário diferente? Ele pode (provavelmente) ser executado como root , mas é processamento de entrada de um variedade de fontes (veja em manpath ). A execução como seu próprio usuário isola o sistema do processo explodindo - ou pior - sendo explorado por páginas do manual mal-intencionadas, corrompidas ou maliciosas.

O pior que poderia acontecer afetaria apenas o índice man pages. 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 qualquer usuário pode 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 acima, há campos separados por tabulações lá:

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

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

    
por Oli 18.08.2014 / 11:24

Tags