Os métodos mais robustos parecem ser auditados:
http://blog.ptsecurity.com/2010/11/requirement-10-track-and-monitor-all.html
O Auditd basicamente intercepta todas as chamadas do sistema e as compara com o seu conjunto de regras. Portanto, em seu /etc/audit/audit.rules
arquivo, você teria algo como o seguinte:
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320
# Feel free to add below this line. See auditctl man page
-a always,exit -F euid=0 -F perm=wxa -k ROOT_ACTION
A última regra é a única regra não padrão.
A principal desvantagem dessa abordagem (e a razão pela qual encontrei essa pergunta ao procurar alternativas) é que os arquivos de log não processados são bastante enigmáticos e são úteis apenas após a execução do programa de consulta no arquivo de log não processado: ausearch
Um exemplo de consulta para essa regra seria:
ausearch -ts today -k ROOT_ACTION -f audit_me | aureport -i -f
Uma solução de bom senso provavelmente seria criar um cron que consultaria seus logs de auditoria brutos e os enviaria para sua solução de log.
Nas distros do Red Hat, você normalmente usa o
/var/log/secure
log para identificar quem está acessando ou utilizandosudo
um sistema Fedora / CentOS / RHEL.Exemplos
exemplo sudoresultado do log:
su exemploresultado do log:
fonte
Se você tiver usuários cooperantes, poderá configurar o rootsh para registrar tudo o que o usuário raiz digita no syslog.
http://linux.die.net/man/1/rootsh
rootsh rpms estão disponíveis no EPEL.
A versão do sudo no RHEL6 também é capaz de registrar o stdout em um arquivo para cada sessão do sudo. Olhe para a página do manual sudo_plugins.
Nenhuma dessas abordagens é completamente à prova de balas.
fonte