So überwachen Sie, welche Dateien geöffnet werden

9

Gibt es ein Tool zum Überwachen, welche Prozesse welche Dateien auf dem System öffnen, damit Sie feststellen 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. 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.

psusi
quelle
Haben Sie inotify ausgecheckt? Siehe @ Kees Antwort hier zum Beispiel: askubuntu.com/questions/25442/… Es gibt ein paar Links zu meiner Antwort hier: askubuntu.com/questions/29566/…
belacqua
@jgbelacua keines davon ist genau das, wonach ich suche. Inotify kann Ihnen sagen, wann eine bestimmte Datei berührt wird, und lsof kann Ihnen sagen, welche Dateien ein Prozess geöffnet hat oder welcher Prozess eine Datei geöffnet hat, aber ich muss herausfinden, welcher Prozess eine Datei immer wieder berührt, und sie dann schließen, bevor ich kann Führen Sie lsof aus, um es zu fangen.
Psusi
Siehe auch
ændrük

Antworten:

7

Sie könnten vielleicht ein Audit-System dafür verwenden. Es ist ein wenig schwer, 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 Täter befindet sich dann in /var/log/audit/audit.log.

Taneli
quelle
Perfekt! Genau das habe ich gesucht.
Psusi
0

Leider ist der Mechanismus, den Linux verwendet, um das Überwachen von Dateien zu ermöglichen, inotify, der nicht genügend Informationen zum Extrahieren nützlicher Daten liefert: Sie erhalten nur den Dateinamen und die durchgefü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 wird darauf gewartet, Ereignisse im angegebenen Verzeichnis zu inotifizieren, 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. die Verwendung eines Editors zum Schreiben in eine Datei) nur zu langsam und kann den fehlerhaften Prozess nicht abfangen.

Wenn Ihre Prozesse die problematischen Dateien intensiver mit E / A bearbeiten, kann Ihr Kilometerstand variieren. Viel Glück.

Guss
quelle
0

fnotifystat ist ein Tool, das entwickelt wurde, um die Aktivität von Linux-Dateien zu überwachen

sudo apt-get install fnotifystat
sudo fnotifystat
Total   Open  Close   Read  Write   PID  Process         Pathname
  7.0    1.0    1.0    5.0    0.0   2075 libvirtd        /proc/cpuinfo
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu0/topology/physical_package_id
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu1/topology/physical_package_id
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu2/topology/physical_package_id
  6.0    2.0    2.0    2.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu3/topology/physical_package_id
  4.0    1.0    1.0    2.0    0.0   2075 libvirtd        /sys/devices/system/node
  4.0    1.0    1.0    2.0    0.0   2075 libvirtd        /sys/devices/system/node/node0
  4.0    2.0    2.0    0.0    0.0  15313 gnome-calendar  /usr/share/zoneinfo/Europe/London
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu0/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu1/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu2/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu2/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu3/topology/core_id
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/cpu3/topology/thread_siblings_list
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/online
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/cpu/present
  3.0    1.0    1.0    1.0    0.0   2075 libvirtd        /sys/devices/system/node/node0/meminfo
  2.0    0.0    0.0    0.0    2.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-release.log
  1.0    0.0    0.0    0.0    1.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-desktop.log
  1.0    0.0    0.0    0.0    1.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-devel.log
  1.0    0.0    0.0    0.0    1.0  12174 xchat           /home/cking/.xchat2/xchatlogs/FreeNode-#ubuntu-kernel.log

Zeigen Sie die Top 10 aktiven Dateien alle 60 Sekunden an, bis sie gestoppt sind:

sudo fnotifystat -t 10 60

Zeigen Sie die Dateiaktivität alle 10 Sekunden nur 6 Mal an:

sudo fnotifystat 10 6

Dateiaktivität von Thunderbird und Prozess-ID 1827 anzeigen:

sudo fnotifystat -p thunderbird,1827

Zeigen Sie jedes Dateibenachrichtigungsereignis und die 20 wichtigsten aktiven Aktivitätsdateien über einen Zeitraum von 5 Minuten an:

sudo sudo notifystat -v -d -c 5m 1

Zeigen Sie einfach jedes Dateibenachrichtigungsereignis auf / sys und / proc und keine periodischen Statistiken an:

sudo fnotifystat -n -i /sys,/proc

Weitere Informationen finden Sie auf der Manpage fnotifystat. Es ist ein recht flexibles Tool.

Colin Ian King
quelle