Descubra qual processo está modificando um arquivo [duplicado]

16

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.

  • SO: teste Debian
  • Kernels: Linux, 2.6.32 a 3.9, 32 e 64 bits.
por Wayne Conrad 06.11.2013 / 14:34

4 respostas

21

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 .

    
por 06.11.2013 / 16:58
4

O SystemTap pode fazer isso usando o script inodewatch .

    
por 06.11.2013 / 16:08
2

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
    
por 06.11.2013 / 14:40
2

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 ...

    
por 06.11.2013 / 14:40