Я не собираюсь прибегать к сложным инструментам, таким как режим жалоб AppArmor, мне нужны простые инструменты, чтобы сказать мне, к каким файлам обращается определенная программа.
linux
files
process
open-files
Boll19
источник
источник
fstat()
или получениеlstat()
информации и т. Д.Ответы:
Согласно Крису Дауну, вы можете использовать
strace -p
для изучения уже запущенного процесса, чтобы увидеть, какие файлы он открывает с этого момента до момента, когда вы завершите работу strace или завершится сам процесс.Если вы хотите, чтобы файлы открывались на протяжении всего процесса, с самого начала используйте его
strace
с именем исполняемого файла. Добавление-f
гарантирует, что о любых разветвленных подпроцессах также будет сообщено. примерИспользование
lsof
для просмотра файлов , открытых в данный момент у процессаЕсли у вас есть SystemTap, вы можете контролировать весь хост на наличие открываемых файлов.
источник
open
не единственный соответствующий системный вызов. Например, можно передавать файловые дескрипторы между процессами через сокет Unix, и существуетopenat
системный вызов, который также может открыть файл.strace
, см. Строки ENOENT в примере.Вы можете использовать
opensnoop
из BCC, который использует eBPF под капотом:Это довольно эффективно, так как он использует kprobes вместо перезапуска системных вызовов, как это
strace
происходит.Вы также можете сделать это с
strace
(возможно, с помощью-f
для отслеживания дочерних элементов отслеживаемого процесса), но его способ работы, включающий перезапуск системных вызовов как часть ptrace , несколько замедлит ваше приложение:При желании вы также можете запустить свое приложение, используя
strace [executable]
илиstrace -f [executable]
.источник
Мой любимый инструмент для отслеживания файлов, которые открывает приложение, - это мощная инфраструктура мониторинга
sysdig
.Для мониторинга всех открытых файлов, открытых программой с именем
exe_file
:Отслеживание всех файлов, открытых на сервере:
Создание файла трассировки, который будет содержать только записи событий в домашних каталогах (которые мы можем проверить позже
sysdig -r writetrace.scap.gz
):Видя все на уровне системного вызова, процесс по имени
exe_file
делает:У Sysdig есть много долот, см. Более интересные вещи, которые он может сделать:
Примеры Sysdig
Как отслеживать и устранять неполадки на сервере Linux с помощью sysdig
У вас также есть
dtrace
то, что мало используется в Linux, но все еще широко используется с операционными системами * BSD:Кроме того
sysdig
,strace
и уdtrace
вас также естьltrace
, какие записи / перехватывает сигналы / динамические библиотеки / системные вызовы, которые вызываются / принимаются процессом:Если программа небольшая, вы можете также рассмотреть возможность ее дизассемблирования
objdump -d exe_file
или дизассемблирования / декомпиляцииHopper
, чтобы увидеть все файлы , с которыми она имеет дело.Для более подробной информации смотрите: Понимание того, что делает бинарный файл Linux
В качестве первого подхода я бы также сделал:
Это недорогой подход, и в случае удачи некоторые имена файлов могут просто присутствовать в режиме ASCII в двоичном файле, если повезет.
См. Также связанный ответ. Почему истина и ложь так велики?
Если двоичные файлы / файлы поставляются вместе с дистрибутивом, вы также можете получить исходные коды из репозиториев исходных текстов дистрибутива или из официальных репозиториев реальной утилиты.
В качестве последнего ресурса вы всегда можете использовать такие инструменты, как gdb или rr для отладки двоичного файла в режиме реального времени.
источник
sysdig
ошибке (вы используете ARM?), Пожалуйста, напишите новый вопрос.