it-swarm.com.de

So überwachen Sie, welche Dateien geöffnet werden

Gibt es ein Tool, mit dem überwacht werden kann, welche Prozesse welche Dateien auf dem System öffnen, sodass Sie nachverfolgen können, welcher Prozess eine bestimmte Datei ständig berührt?

Lsof kann herausfinden, ob Sie es ausführen, während der Prozess die Datei geöffnet hat. Wenn es sich jedoch um einen kurzlebigen Prozess handelt, der gelegentlich ausgeführt wird, können Sie ihn nicht mit lsof abfangen. Benötigen Sie etwas, das Kernel-Tracing verwendet.

9
psusi

Sie könnten vielleicht ein Auditsystem dafür verwenden. Es ist ein kleines Schwergewicht, aber so etwas sollte funktionieren (in /etc/audit/audit.rules):

# delete all other rules
-D

# watch the file in question
-w /path/to/file -p rwxa

und dann denke ich, dass Sie auditd neu starten müssen:

Sudo service audit restart

(Falls Sie es nicht installiert haben, befindet es sich im Paket auditd.) Der Schuldige befindet sich dann in /var/log/audit/audit.log.

7
taneli

Leider ist der Mechanismus, mit dem Linux die Überwachung von Dateien zulässt, inotify, da er nicht genügend Informationen zum Extrahieren nützlicher Daten enthält: Sie erhalten nur den Dateinamen und die ausgeführte Aktion.

Ich habe versucht, so etwas zu verwenden:

Sudo inotifywait -mr somedir --format "%w%f" | while read file; do echo -n "$file => ";lsof -b $file; echo ""; done

Dadurch werden Ereignisse im angegebenen Verzeichnis inotifiziert, und für jedes Ereignis wird lsof ausgeführt, um zu versuchen, den Prozess abzufangen, der die Datei berührt. Leider ist der LSOF-Befehl für die meisten von mir getesteten Zugriffe (z. B. das Schreiben in eine Datei mit einem Editor) zu langsam und kann den fehlerhaften Prozess nicht erfassen.

Wenn Ihre Prozesse die problematischen Dateien etwas intensiver bearbeiten IO, kann Ihr Kilometerstand variieren. Viel Glück.

0
Guss