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.

https://access.redhat.com/webassets/avalon/d/Red_Hat_Enterprise_Linux-6-Security_Guide-en-US/images/3ea2ab74ab03c7e846f1bc2a34f27967/audit_architecture.png

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:

  1. -F dir” identifica o diretório que será monitorado;
  2. -S unlink” define a chamada de sistema (unlink: remoção);
  3. -F key” define a chave de filtragem/pesquisa (para ausearch);
  4. -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/