Finden Sie heraus, welcher Prozess eine Datei ändert

35

Ich versuche, einen zuverlässigen Weg zu finden, um herauszufinden, welcher Prozess auf meinem Computer eine Konfigurationsdatei ändert ( /etc/hostsum genau zu sein).

Ich weiß, dass ich mithilfe lsof /etc/hostsvon herausfinden kann, bei welchen Prozessen die Datei aktuell geöffnet ist. Dies hilft jedoch nicht, da der Prozess die Datei offensichtlich öffnet, darauf schreibt und sie dann wieder schließt.

Ich habe mir auch die lsofWiederholungsoption (-r) angeschaut , aber sie scheint nur einmal pro Sekunde zu laufen, was wahrscheinlich niemals das laufende Schreiben erfassen wird.

Ich kenne ein paar Tools zum Überwachen von Änderungen am Dateisystem, aber in diesem Fall möchte ich wissen, welcher Prozess dafür verantwortlich ist, was bedeutet, dass er auf frischer Tat ertappt wird.

raubt
quelle

Antworten:

52

Sie können Auditing verwenden, um dies zu finden. Falls noch nicht verfügbar, installieren und aktivieren Sie die Überwachung für Ihre Distribution.

Setzen Sie eine Audit-Überwachung auf / 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.

Warten Sie, bis sich die Hosts-Datei geändert hat, und verwenden Sie dann ausearch, um festzustellen, was protokolliert wird

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

Sie erhalten Massen von Ausgaben, z


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"


In diesem Fall habe ich den Befehl touch verwendet, um den Zeitstempel der Dateien zu ändern. Die PID war 7294 und die PID war 7259 (meine Shell).

user9517 unterstützt GoFundMonica
quelle
2
Die "Prüfung für Ihre Distribution aktivieren" sollte wahrscheinlich etwas erweitert werden. Ärgerlicherweise haben die obigen Befehle weder Fehler noch Ergebnisse geliefert. "/ sbin / auditctl -e 1" hat auch nicht geholfen. Das Ausführen eines Audit-Deamons für die Protokollierung hat geholfen - "/etc/init.d/auditd start" (obwohl meine Regeln gelöscht wurden und ich sie erneut eingeben musste).
Tobixen
Hat bei mir nicht funktioniert, ausearchkehrt immer zurück<no matches>
m0skit0
1
manchmal müssen Sie möglicherweise mehrere Audits festlegen, um den tatsächlichen Prozess abzurufen, der die Änderung initiiert hat, wenn dieser Prozess beispielsweise einen externen Befehl aufruft, um die Arbeit dafür zu erledigen. dh ich habe versucht herauszufinden, warum ein Benutzer crontab Eintrag ständig zurückgesetzt wurde. Der Befehl crontab war dafür verantwortlich, aber als ich die von ihm beendete ppid überprüfte, musste ich auch / usr / bin / crontab prüfen, dann den Zeitstempel des Zugriffs auf die crontab mit der geprüften Ausführung von crontab abgleichen und dann prüfen Es ist ppid ... was zeigte, dass ein Orchestrierungs-Daemon eine bestimmte Benutzer-Cron-Konfiguration erzwang.
Wil
3

Sie können auch inotify-tools verwenden:

  inotifywait -mq -e open -e modify /etc/hosts
Dragos
quelle
14
Auditd kann Ihnen die gewünschten Informationen geben. Auch wenn es einfach ist, davon auszugehen, dass inotify dies zulässt, wird dies nicht der Fall sein, da die Prozess-ID, die die Änderung vorgenommen hat, nicht angegeben wird.
objektiviert
2

Nach langem Suchen habe ich die Lösung gefunden, benutze einfach diesen Befehl: sudo fs_usage | grep [path_to_file]

Treblam
quelle
2
Dies ist nur für MacOS ...
Majick