Você pode usar o auditd e adicionar uma regra para esse arquivo a ser assistido:
auditctl -w /path/to/that/file -p wa
Em seguida, observe se as entradas devem ser gravadas em /var/log/audit/audit.log
.
Um arquivo específico em nossos servidores de produção está sendo modificado em horários aparentemente aleatórios que parecem não estar correlacionados com nenhuma atividade de log. Não podemos descobrir que programa está fazendo isso e há muitos suspeitos. Como posso encontrar o culpado?
É sempre o mesmo arquivo, no mesmo caminho, mas em servidores diferentes e em momentos diferentes. As caixas são gerenciadas pelo fantoche , mas os registros de marionetes não mostram atividade no momento em que o arquivo é modificado.
Qual gancho, ferramenta ou técnica do kernel pode nos ajudar a descobrir qual processo está modificando esse arquivo?
lsof não é adequado para isso, porque o arquivo está sendo aberto, modificado e fechado muito rapidamente. Qualquer solução que dependa de sondagem (como executar lsof frequentemente) não é boa.
O SystemTap pode fazer isso usando o script inodewatch .
Se você puder pegá-lo no ato, ou seja, se o arquivo está sendo acessado no momento, você pode encontrar o processo executando lsof:
$ while :; do echo foo >> bar.txt; done &
$ sudo lsof bar.txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 25723 terdon 1u REG 8,6 5015796 16647496 bar.txt
caso o (s) programa (s) que você está procurando ainda tenha o arquivo aberto, você pode usar o seguinte:
sudo lsof /path/to/file/being/modified
você também pode chamar isso em um pequeno loop, processando o seguinte script getfileusers.sh
:
#!/bin/sh
FILE=$1
while true; do
lsof "${FILE}"
done > /tmp/fileusers.log
e, em seguida, ligue para ele:
sudo ./getfileusers.sh /path/to/file/being/modified
e, eventualmente, inspecionar /tmp/fileusers.log
para ver quem tocou no arquivo ...
Tags debian linux filesystems