Как контролировать открытые файлы процесса в реальном времени?

Я знаю, что могу просмотреть открытые файлы процесса, используя lsof в тот момент на моей машине Linux. Тем не менее, процесс может открывать, изменять и закрывать файл так быстро, что я не смогу его увидеть, наблюдая его, используя стандартные сценарии оболочки (например, watch ), как описано в «Мониторинг открытых файлов процессов в Linux (в режиме реального времени) " .

Итак, я думаю, что я ищу простой способ проверки процесса и посмотреть, что он сделал за время. Было бы замечательно, если бы можно было увидеть, какие сетевые подключения он попытался сделать и провести аудит, прежде чем процесс успеет запустить без запуска аудита.

В идеале я хотел бы сделать это:

 sh $ audit-lsof /path/to/executable 4530.848254 OPEN read /etc/myconfig 4530.848260 OPEN write /var/log/mylog.log 4540.345986 OPEN read /home/gert/.ssh/id_rsa <-- suspicious 4540.650345 OPEN socket TCP ::1:34895 -> 1.2.3.4:80 | [...] 4541.023485 CLOSE /home/gert/.ssh/id_rsa <-- would have missed 4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80 | this when polling 

Можно ли использовать strace и некоторые флаги, чтобы не видеть каждый системный вызов?

  • lsof - отладить выходную информацию
  • запустить lsof в неинтерактивном режиме
  • Как захватить номер порта из этого выхода `lsof -F`, используя awk (или что-то лучше)?
  • lsof: список только файлов определенного типа
  • lsof сравнивается с pfiles, разница?
  • Определение того, какой процесс связан с портом
  • Как использовать lsof для идентификации входящих TCP-соединений?
  • lsof vs cat / proc / ... / maps
  • One Solution collect form web for “Как контролировать открытые файлы процесса в реальном времени?”

    Запуск с

     strace -e trace=open,close,read,write,connect,accept your-command-here 

    вероятно, будет достаточным.

    Вам нужно будет использовать опцию -o чтобы вывести вывод strace куда-нибудь, кроме консоли, если процесс может печатать на stderr. Если у вас вилки процесса, вам также понадобится -f или -ff .

    О, и вам может понадобиться -t , так что вы можете видеть, когда произошли звонки.


    Обратите внимание: вам может потребоваться настроить список вызовов функций в зависимости от того, что делает ваш процесс – мне нужно было добавить getdents например, чтобы получить лучший пример с помощью ls :

     $ strace -t -e trace=open,close,read,getdents,write,connect,accept ls >/dev/null ... 09:34:48 open("/etc/ld.so.cache", O_RDONLY) = 3 09:34:48 close(3) = 0 09:34:48 open("/lib64/libselinux.so.1", O_RDONLY) = 3 09:34:48 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@V\0\0\0\0\0\0"..., 832) = 832 09:34:48 close(3) = 0 ... 09:34:48 open("/proc/filesystems", O_RDONLY) = 3 09:34:48 read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tb"..., 1024) = 366 09:34:48 read(3, "", 1024) = 0 09:34:48 close(3) = 0 09:34:48 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3 09:34:48 close(3) = 0 09:34:48 open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3 09:34:48 getdents(3, /* 5 entries */, 32768) = 144 09:34:48 getdents(3, /* 0 entries */, 32768) = 0 09:34:48 close(3) = 0 09:34:48 write(1, "file-A\nfile-B\nfile-C\n", 21) = 21 09:34:48 close(1) = 0 09:34:48 close(2) = 0 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.