Durante a semana, tivemos uma demanda administrativa que pedia o gerenciamento de arquivos alterados em nosso MTA (Mail Transfer Agent – servidor de emails), mais precisamente a remoção de arquivos de uma conta de usuário (caixa postal). Existem várias opções, porém a distribuição CentOS (é o SO de nosso MTA) já trabalha com o auditd por padrão – em versões mais atuais o serviço é instalado por padrão. Sendo assim, resolvemos explorar um pouco mais os recursos do auditd.
A instalação pode ser feita através do repositório padrão, tanto no CentOS como no Ubuntu:
# No CentOS/Fedora yum install audit
# No Ubuntu apt-get install auditd
Feito isto, para configurar a inicialização no boot (em ambas distribuições):
systemctl enable auditd systemctl restart auditd
Basicamente, podemos trabalhar com três ferramentas para gerenciar mudanças no sistema de arquivos: auditctl (configuração das regras de auditoria), ausearch (consultar um evento de log) e aureport (relatório do sistema de auditoria).
A princípio, as regras devem ser configuradas em /etc/audit/audit.rules ou segmentar as definições em /etc/audit/rules.d.
Podemos verificar quais regras foram definidas ou manipular novas regras (em memória) através da ferramenta auditctl:
[root@mail ~]# auditctl -l -a always,exit -F arch=b32 -S unlink,unlinkat -F dir=/usr/local/meu_mta/users/u/s/user_abc@dominio.com.br/cur/ -F perm=w -F key=DELCUR -a always,exit -F arch=b64 -S unlink,unlinkat -F dir=/usr/local/meu_mta/users/u/s/user_abc@dominio.com.br/cur/ -F perm=w -F key=DELCUR
No exemplo anterior, estou demonstrando a regra que fizemos para monitorar apenas remoções de arquivos na caixa de email (cur) do usuário user_abc@dominio.com.br (vide -F dir=…).
Resumindo:
- “-F dir” identifica o diretório que será monitorado;
- “-S unlink” define a chamada de sistema (unlink: remoção);
- “-F key” define a chave de filtragem/pesquisa (para ausearch);
- “-F perm” define as permissões que serão auditadas:
r – leitura, w – escrita, x – execução e a – mudança de atributos
Como o nosso objetivo foi uma análise momentânea e pontual, adicionamos a regra apenas em memória (sem modificar o arquivo audit.rules):
auditctl -a always,exit -F arch=b32 -F dir=/usr/local/meu_mta/users/u/s/user_abc\@dominio.com.br/cur/ -S unlink -S unlinkat -p w -k DELCUR auditctl -a always,exit -F arch=b64 -F dir=/usr/local/meu_mta/users/u/s/user_abc\@dominio.com.br/cur/ -S unlink -S unlinkat -p w -k DELCUR
“Percebam que o comando para adição da regra não difere muito da saída exibida anteriormente (quando listamos as regras em memória). Vale lembrar que a opção *-k* define a chave de filtragem – poderíamos usar DELCUR1 e DELCUR2 (neste caso não é necessário).“
Para consultar se houve remoção na caixa postal, basta digitar:
ausearch -k DELCUR
Ao pesquisar por alternativas, também encontrei uma solução bastante interessante para análise em tempo real. Trata-se do fswatch…
Felizmente, no Ubuntu 18.04 (meu desktop), o binário está disponível a partir do repositório padrão. Caso o kernel ofereça suporte ao inotify, o fswatch pode exibir de forma amigável todos os eventos envolvendo arquivos e diretórios.
Por exemplo:
root@humberto-desktop:~# fswatch -x -m inotify_monitor /home/humberto/ /home/humberto/firewall.js PlatformSpecific /home/humberto IsDir /home/humberto PlatformSpecific /home/humberto IsDir /home/humberto PlatformSpecific /home/humberto/.viminfo PlatformSpecific /home/humberto/.viminfo PlatformSpecific /home/humberto/.viminfo PlatformSpecific /home/humberto/.ICEauthority PlatformSpecific /home/humberto/.ICEauthority PlatformSpecific /home/humberto/.ICEauthority PlatformSpecific /home/humberto/.bash_history PlatformSpecific /home/humberto/.bash_history PlatformSpecific /home/humberto/.bash_history PlatformSpecific /home/humberto/.bash_logout PlatformSpecific /home/humberto/.bash_logout PlatformSpecific /home/humberto/.bash_logout PlatformSpecific /home/humberto/.profile PlatformSpecific /home/humberto/.profile PlatformSpecific /home/humberto/.profile PlatformSpecific /home/humberto/.bashrc PlatformSpecific /home/humberto/.bashrc PlatformSpecific /home/humberto/.bashrc PlatformSpecific /home/humberto/.xinputrc PlatformSpecific /home/humberto/.xinputrc PlatformSpecific /home/humberto/.xinputrc PlatformSpecific /home/humberto/.selected_editor PlatformSpecific /home/humberto/.selected_editor PlatformSpecific /home/humberto/.selected_editor PlatformSpecific /home/humberto IsDir /home/humberto PlatformSpecific /home/humberto/firewall.js PlatformSpecific /home/humberto IsDir /home/humberto PlatformSpecific /home/humberto/firewall.js PlatformSpecific
Outras referências:
https://www.thegeekdiary.com/how-to-use-auditd-to-monitor-a-file-deletion-in-linux/
https://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
https://www.ostechnix.com/monitor-file-changes-using-fswatch-linux/
No Comments Yet