Descubra qual processo está mudando um arquivo

33

Estou tentando encontrar uma maneira confiável de descobrir qual processo na minha máquina está alterando um arquivo de configuração ( /etc/hosts para ser específico).

Eu sei que posso usar lsof /etc/hosts para descobrir quais processos atualmente têm o arquivo aberto, mas isso não ajuda, porque obviamente o processo está abrindo o arquivo, escrevendo nele e depois fechando-o novamente.

Eu também olhei para a opção de repetição de lsof (-r), mas parece que ela é tão rápida quanto uma vez por segundo, o que provavelmente nunca captura a gravação em andamento.

Eu conheço algumas ferramentas para monitorar mudanças no sistema de arquivos, mas neste caso eu quero saber qual processo é responsável, o que significa pegar no ato.

    
por robbles 12.10.2011 / 09:36

4 respostas

49

Você pode usar a auditoria para encontrar isso. Se ainda não estiver disponível, instale e ative a auditoria para sua distro.

defina um relógio de auditoria em / etc / hosts

/sbin/auditctl -w /etc/hosts -p war -k hosts-file

-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.

Espere até que o arquivo hosts mude e use ausearch para ver o que está logado

/sbin/ausearch -f /etc/hosts | more

Você terá uma grande quantidade de resultados, por exemplo

time->Wed Oct 12 09:34:07 2011 type=PATH msg=audit(1318408447.180:870): item=0 name="/etc/hosts" inode=2211062 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 type=CWD msg=audit(1318408447.180:870): cwd="/home/iain" type=SYSCALL msg=audit(1318408447.180:870): arch=c000003e syscall=2 success=yes exit=0 a0=7fff73641c4f a1=941 a2=1b6 a3=3e7075310c items=1 ppid=7259 pid=7294 au id=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=123 comm="touch" exe="/bin/touch" subj=user_u:system_r:unconfined_t:s0 key="hosts-file"

Neste caso, usei o comando touch para alterar os timstamp dos arquivos. O pid era 7294 e o ppid era 7259 (meu shell).

    
por 12.10.2011 / 09:54
3

Você também pode usar inotify-tools:

  inotifywait -mq -e open -e modify /etc/hosts
    
por 12.10.2011 / 10:11
2

Depois de muita pesquisa, encontrei a solução, basta usar este comando: sudo fs_usage | grep [path_to_file]

    
por 14.05.2016 / 12:09
0

provavelmente é melhor usar algo como incron então

link

você pode fazer com que ele acione um script para algum tipo de diags

    
por 20.05.2014 / 13:57