Scopri quale processo sta modificando un file


35

Sto cercando di trovare un modo affidabile per trovare quale processo sulla mia macchina sta cambiando un file di configurazione ( /etc/hostsper essere precisi).

So che posso usare lsof /etc/hostsper scoprire quali processi attualmente hanno il file aperto, ma questo non aiuta perché il processo sta ovviamente aprendo il file, scrivendolo e quindi richiudendolo.

Ho anche osservato l' lsofopzione di ripetizione (-r), ma sembra andare veloce solo una volta al secondo, che probabilmente non catturerà mai la scrittura in corso.

Conosco un paio di strumenti per monitorare le modifiche al filesystem, ma in questo caso voglio sapere quale processo è responsabile, il che significa coglierlo in atto.

Risposte:


53

È possibile utilizzare il controllo per trovare questo. Se non è già disponibile, installa e abilita il controllo per la tua distribuzione.

imposta un controllo di controllo su / 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.

Attendi che il file hosts cambi, quindi usa ausearch per vedere ciò che è registrato

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

Otterrai masse di output ad es


time-> mer 12 ott 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 articoli = 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"


In questo caso ho usato il comando touch per cambiare il timstamp dei file il suo pid era 7294 e il suo ppid era 7259 (la mia shell).


2
Il "abilitare il controllo per la tua distribuzione" dovrebbe probabilmente essere ampliato un po '. In modo fastidioso, i comandi sopra non mi hanno dato né errori né risultati. Anche "/ sbin / auditctl -e 1" non ha aiutato. L'esecuzione di un deamon di audit per eseguire la registrazione ha aiutato - "/etc/init.d/auditd start" (sebbene abbia eliminato le mie regole, quindi ho dovuto inserirle di nuovo).
Tobixen,

Non ha funzionato per me, ausearchritorna sempre<no matches>
m0skit0

1
a volte potrebbe essere necessario impostare più audit per ottenere il processo effettivo che ha avviato la modifica se tale processo, ad esempio, chiama un comando esterno per eseguire il lavoro. cioè stavo cercando di scoprire perché una voce crontab dell'utente veniva costantemente reimpostata. Il comando crontab era responsabile, ma quando ho controllato il ppid che era uscito, quindi ho dovuto controllare anche / usr / bin / crontab, quindi abbinare il timestamp dell'accesso al crontab all'esecuzione controllata di crontab e quindi controllare è ppid ... che ha rivelato che un demone dell'orchestrazione stava imponendo una configurazione cron dell'utente specifica.
Wil,

3

Puoi anche usare inotify-tools:

  inotifywait -mq -e open -e modify /etc/hosts

14
Auditd è in grado di darti le informazioni che desideri. Anche se è facile supporre che inotify ti permetta di farlo - non lo farà, poiché non ti darà l'ID del processo che ha apportato la modifica.
oggettivato il

2

Dopo molte ricerche, ho trovato la soluzione, basta usare questo comando: sudo fs_usage | grep [path_to_file]


2
questo è solo per MacOS ...
Majick

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.