Jak monitorować, które pliki są otwierane

9

Czy istnieje narzędzie do monitorowania, które procesy otwierają jakie pliki w systemie, dzięki czemu można śledzić, który proces dotyka określonego pliku?

Lsof może dowiedzieć się, czy uruchomisz go, gdy proces ma otwarty plik, ale jeśli jest to krótkotrwały proces, który uruchamia się co jakiś czas, nie możesz go złapać za pomocą lsof. Potrzebujesz czegoś, co korzysta ze śledzenia jądra.

psusi
źródło
Czy sprawdziłeś inotify? Zobacz odpowiedź @ Kees tutaj na przykład: askubuntu.com/questions/25442/... Istnieje kilka linków do mojej odpowiedzi tutaj: askubuntu.com/questions/29566/...
belacqua
@jgbelacua żadna z tych rzeczy nie jest tym, czego szukam. Inotify może powiedzieć, kiedy dany plik zostanie dotknięty, a lsof może powiedzieć, jakie pliki otworzył proces lub jaki proces ma otwarty plik, ale muszę dowiedzieć się, który proces dotyka pliku, a następnie go zamknąć, zanim będę mógł uruchom lsof, aby go złapać.
psusi
Powiązane: askubuntu.com/questions/24512/...
ændrük

Odpowiedzi:

7

Możesz do tego użyć systemu kontroli. Jest trochę ciężki, ale coś takiego powinno działać (w /etc/audit/audit.rules):

# delete all other rules
-D

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

a potem myślę, że musisz ponownie uruchomić auditd:

sudo service audit restart

(Jeśli nie masz go zainstalowanego, znajduje się w pakiecie audytującym.) Winowajcę można następnie znaleźć w /var/log/audit/audit.log.

taneli
źródło
Doskonały! Właśnie tego szukałem.
psusi
0

Niestety mechanizm, za pomocą którego Linux pozwala monitorować pliki, jest niewidoczny, co nie zapewnia wystarczającej ilości informacji do wyodrębnienia użytecznych danych: otrzymujesz tylko nazwę pliku i wykonaną czynność.

Próbowałem użyć czegoś takiego:

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

To nasłuchuje w celu powiadomienia o zdarzeniach w określonym katalogu i dla każdego zdarzenia uruchamia lsof, aby spróbować przechwycić proces, który dotyka pliku. Na nieszczęście dla większości testowanych przeze mnie dostępów (takich jak użycie edytora do zapisu do pliku), polecenie LSOF jest po prostu spowolnione i nie udaje mu się złapać przestępczego procesu.

Jeśli twoje procesy wykonują bardziej intensywne operacje wejścia / wyjścia na problematycznych plikach, twój przebieg może się różnić. Powodzenia.

Guss
źródło
0

fnotifystat to narzędzie, które zostało zaprojektowane do śledzenia aktywności plików linuksowych

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

Pokaż 10 najlepszych aktywnych plików co 60 sekund, aż do zatrzymania:

sudo fnotifystat -t 10 60

Pokaż aktywność pliku co 10 sekund tylko 6 razy:

sudo fnotifystat 10 6

Pokaż aktywność pliku thunderbirda i ID procesu 1827:

sudo fnotifystat -p thunderbird,1827

Pokaż każde zdarzenie powiadomienia o pliku i 20 najpopularniejszych aktywnych plików w ciągu 5 minut:

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

Po prostu pokaż każde zdarzenie powiadomienia pliku w / sys i / proc i brak okresowych statystyk:

sudo fnotifystat -n -i /sys,/proc

Aby uzyskać więcej informacji, odwiedź stronę podręcznika fnotifystat, jest to dość elastyczne narzędzie.

Colin Ian King
źródło