Registrar todas as chamadas de todos os programas SUID?

12

Eu gostaria de ter um arquivo de log que contenha uma entrada para cada vez que um usuário executar qualquer programa suid, contendo o nome do usuário, o programa e quaisquer argumentos da linha de comando passados ​​para ele. Existe uma maneira padrão de conseguir isso no Linux?

Kim
fonte

Respostas:

7

Você pode registrar todas as chamadas de um executável específico (setuid ou não) através do subsistema de auditoria . A documentação é bastante escassa; comece com a página de manual auditctl ou talvez este tutorial . As distribuições mais recentes enviam um auditdpacote. Instale-o e verifique se o auditddaemon está em execução.

auditctl -A exit,always -F path=/path/to/executable -S execve

e veja as chamadas sendo conectadas /var/log/audit/audit.log(ou onde quer que sua distribuição tenha configurado isso).

Gilles 'SO- parar de ser mau'
fonte
1
Eu acho que alguém poderia escrever um script para primeiro obter todos os binários SUID com find e depois usar sua solução para cada um. Não é elegante, mas certamente factível. Obrigado!
Kim
2
@ Kim: Eu acho que você pode registrar todas as invocações de um binário raiz setuid por um usuário não raiz, substituindo -F path=…por -F euid=0 -F 'uid!=0'ou algo parecido. Não consigo ver um gancho no código setxid invocado porexecve nem um relógio específico do setxid no subsistema de auditoria . Ou, é claro, você pode registrar todo execvee pós-processo.
Gilles 'SO- stop be evil'
Interessante. Nunca ouvi falar disso antes. Eu me pergunto o quão amplamente é usado. O Debian popcon não tem uma entrada para auditd.
Faheem Mitha
findcomando para listar todos os arquivos SUID:find / -xdev \( -perm -4000 \) -type f -print
1
@FaheemMitha Tem uma entrada popcon: qa.debian.org/popcon-graph.php?packages=auditd
jofel