Wie überwacht man, welche Dateien geöffnet werden?

9

Gibt es ein Tool, um zu überwachen, welche Prozesse welche Dateien auf dem System öffnen, damit Sie aufspüren können, welcher Prozess eine bestimmte Datei berührt?

Lsof kann herausfinden, ob Sie es ausführen, während der Prozess die Datei geöffnet hat, aber wenn es sich um einen kurzlebigen Prozess handelt, der hin und wieder ausgeführt wird, können Sie ihn nicht mit lsof abfangen. Brauchen Sie etwas, das Kernel-Tracing verwendet.

    
psusi 08.04.2011, 20:44

2 Antworten

7

Sie könnten vielleicht ein Audit-System 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 in Paket auditd.) Der Täter kann dann in /var/log/audit/audit.log gefunden werden.

    
taneli 01.07.2011, 21:23
0

Leider ist der Mechanismus, den Linux verwendet, um Dateien zu überwachen, inotify, was nicht genug Informationen liefert, um nützliche Daten zu extrahieren: Sie erhalten nur den Dateinamen und die Aktion, die gemacht wurde.

Ich habe versucht, etwas wie folgt 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 Zugriffe, die ich getestet habe (wie zum Beispiel das Verwenden eines Editors zum Schreiben in eine Datei), einfach zu langsam und schafft es nicht, den problematischen Prozess zu erfassen.

Wenn Ihre Prozesse in den problematischen Dateien eine intensivere E / A-Verarbeitung durchführen, kann die Laufleistung variieren. Viel Glück.

    
Guss 14.04.2011 17:32

Tags und Links