Я знаю, что могу просматривать открытые файлы процесса, 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
некоторых флагов, чтобы не видеть каждый системный вызов?
источник
Ответы:
Запуск с
вероятно, будет достаточно.
Вам нужно будет использовать
-o
опцию, чтобы поместить вывод strace куда-нибудь, кроме консоли, если процесс может печатать в stderr. Если ваш процесс разветвляется, вам также понадобится-f
или-ff
.О, и вы можете захотеть
-t
, чтобы вы могли видеть, когда произошли звонки.Обратите внимание, что вам может потребоваться настроить список вызовов функций в зависимости от того, что делает ваш процесс - мне нужно было добавить,
getdents
например, чтобы получить лучший пример, используяls
:источник
-o
для вывода результатов в файл (ы). Затем вы можете запуститьtail -F strace.output
в другом терминале, чтобы получить «живое» обновление.strace
к запущенному процессу с помощью-p PID
опции.-y
в «[p] пути rint, связанные с аргументами дескриптора файла»