Auditoria de arquivo no Linux: como observar a árvore de diretórios para exclusões?

8

Eu tenho um script de fórum em execução no servidor e, de alguma forma, um pequeno número de anexos começa a se perder. Eu quero descobrir o que está excluindo e em que momento. Como posso configurar o Linux auditd (auditctl) para observar a árvore de diretório (os anexos são armazenados dentro da árvore de diretórios de vários níveis) para observar as exclusões de arquivos?

Pode ser que eu deva usar alguma outra ferramenta para isso?

    
por Vladislav Rastrusny 24.05.2010 / 13:21

4 respostas

8

Esta é uma resposta que escrevi para uma pergunta anterior:

Generally if you wish to know what a process/user/file is doing without having to run lsof against it 24/7 you use auditctl.

Assuming you have a recent-ish kernel audit control should be a simple operation. (This is in Debian-fu, if you're running Red Hat translate as appropriate)

# apt-get install auditd

Make sure that its running (/etc/init.d/auditd status).

auditctl -a entry,always -F arch=b64 -S open -F pid=<process id>

Replace b64 with b32 if you're running 32-bit arch, open can be replaced by any system call or the word 'all'

For more read the auditctl manpage.

Você pode usar este método e pedir que ele atente para a chamada de sistema 'unlink'.

O parâmetro -w é útil para assistir arquivos / diretórios, mas como a página man explica, existem advertências.

-w caminho Insira um relógio para o objeto do sistema de arquivos no caminho. Você não pode inserir um relógio no diretório de nível superior. Isso é proibido pelo kernel. Os curingas também não são suportados e gerarão um aviso. A maneira como os relógios trabalham é rastreando o inode internamente. Isso significa que, se você colocar um relógio em um diretório, verá o que parecem ser eventos de arquivo, mas na verdade é apenas a atualização de metadados. Você pode perder alguns eventos fazendo isso. Se você precisar assistir a todos os arquivos em um diretório, é recomendável colocar um relógio individual em cada arquivo. Ao contrário das regras de auditoria do syscall, os relógios não afetam o desempenho com base no número de regras enviadas ao kernel.

    
por 24.05.2010 / 13:37
1

Talvez o incron possa ser usado?

    
por 24.05.2010 / 17:22
0

Algumas ideias. Você pode usar strace para ver o que seu aplicativo está fazendo, mas pode gerar um log de logs e pode tornar o sistema mais lento.

Outra ideia é usar inotifywait e, em seguida, lsof/fuser no arquivo para ver o que está sendo usado. Você pode tentar executar esse script com alta prioridade (se puder) para ter as informações mais precisas possíveis. Provavelmente ele não detectará a chamada unlink , já que o arquivo será removido antes que o evento seja entregue.

    
por 24.05.2010 / 15:48
0

Embora a recomendação do fenix parece ideal, você pode achar útil um IDS de sistema de arquivos, como o AIDE . Infelizmente, é improvável que seja refinado o suficiente para o que você está tentando isolar.

Com frequência, escrevo scripts como uma solução para problemas como o que você descreve. Se você não consegue realizar o que deseja com as soluções recomendadas, escreva algo por conta própria. Muitas vezes não é muito complicado.

    
por 24.05.2010 / 15:17