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

9

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. Quero descobrir o que os está excluindo e a que horas. Como posso configurar o auditd do Linux (auditctl) para observar a árvore de diretórios (os anexos são armazenados na árvore de diretórios de vários níveis) para observar as exclusões de arquivos lá?

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

Vladislav Rastrusny
fonte

Respostas:

8

Esta é uma resposta que escrevi para uma pergunta anterior:

Geralmente, se você deseja saber o que um processo / usuário / arquivo está fazendo sem precisar executar o lsof nele 24/7, você usa o auditctl.

Supondo que você tenha um controle de auditoria recente do kernel deve ser uma operação simples. (Isso está no Debian-fu, se você estiver executando o Red Hat translate conforme apropriado)

# apt-get install auditd

Verifique se está em execução (/etc/init.d/auditd status).

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

Substitua b64 por b32 se você estiver executando o arco de 32 bits, aberto pode ser substituído por qualquer chamada do sistema ou pela palavra 'todos'

Para mais, leia a página de manual auditctl.

Você pode usar esse método e pedir para assistir a chamada do sistema 'desvincular'.

O parâmetro -w é útil para assistir arquivos / diretórios, mas, como a página de manual 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 funcionam é rastreando o inode internamente. Isso significa que, se você observar um diretório, verá o que parece ser um evento de arquivo, mas na verdade é apenas a atualização de metadados. Você pode perder alguns eventos ao fazer isso. Se você precisar assistir a todos os arquivos em um diretório, é recomendável colocar uma inspeção individual em cada arquivo. Diferentemente das regras de auditoria do syscall, os relógios não afetam o desempenho com base no número de regras enviadas ao kernel.

Aaron Tate
fonte
Eu não posso :( Eu PHP em execução no modo CGI É sempre um novo processo não Além disso, eu quero não para assistir a um único processo, mas assistir uma parte específica do sistema de arquivos para alterações...
Vladislav Rastrusny
Sim, veja a edição que fiz, existem parâmetros para observar os diretórios do sistema de arquivos, mas com ressalvas ou arquivos.
Aaron Tate
Existem cerca de 1000 pastas e cerca de 50k de arquivos. Então isso também não vai funcionar ... :(
Vladislav Rastrusny
Geralmente, desde que você esteja ciente das advertências, poderá seguir em frente e colocar o relógio no diretório de nível superior que contém as pastas que deseja assistir.
Aaron Tate
Eu preciso fazer a mesma coisa (observe uma pasta para exclusões para encontrar o PID / nome do processo que fez isso), mas isso não parece funcionar (pelo menos em um kernel 3.x). Se eu executar "auditctl -a entry, sempre -F arch = b64 -S desvincular -w / path / to / dir" para rastrear exclusões, então eu obtenho "a opção watch não pode ser fornecida com um syscall". Alguém tem alguma idéia?
IBBoard 25/07/12
1

Talvez incron poderia ser usado?

ptman
fonte
Não permite observar a árvore como um todo. Somente por diretório, como eu posso ver.
Vladislav Rastrusny
0

Algumas idéias. Você pode usar stracepara ver o que seu aplicativo está fazendo, mas isso pode gerar um log de logs e diminuir a velocidade do sistema.

Outra idéia é usar inotifywait, depois lsof/fuserno arquivo, para ver o que está sendo usado. Você pode tentar executar esse script com alta prioridade (se você puder) para ter informações o mais precisas possível. Provavelmente não atenderá a unlinkchamada, pois o arquivo desaparecerá antes da entrega do evento.

Dan Andreatta
fonte
Eu não posso. Não sei em qual processo executar o rastreio porque encontro arquivos excluídos após algum tempo. O inotifywait também não funcionará porque o PHP está sendo executado como CGI e existem muitos processos PHP com IDs diferentes por aí.
Vladislav Rastrusny
O inotify é usado para monitorar o sistema de arquivos, não os processos em execução. Para o rastreio, é necessário rastrear o processo pai principal com o -fsinalizador, para seguir os filhos.
Dan Andreatta 24/05
0

Embora a recomendação auditd da fenix pareça ideal, você pode encontrar um IDS de sistema de arquivos como o AIDE útil. Infelizmente, é improvável que seja granulado o suficiente para o que você está tentando isolar.

Escreverei frequentemente scripts como uma solução para problemas como o que você descreve. Se você não conseguir o que deseja com as soluções recomendadas, escreva algo você mesmo. Muitas vezes não é muito complicado.

Warner
fonte
Parece, é apenas para localizar alterações de arquivos. Não para monitoramento em tempo real.
Vladislav Rastrusny