То, что вы ищете, это инструмент, который показывает, как программа взаимодействует с системой (точнее, с ядром). Программы взаимодействуют с системой с помощью системных вызовов. Примеры системных вызовов:
open
- используется для открытия файла;
read
и write
- используется для чтения / записи из / в дескриптор файла;
connect
- используется для подключения сокета к пиру;
- много, много других (см.
man syscalls
).
Дело в том, что системные вызовы можно отслеживать с помощью ptrace(2)
. Итак, в основном, вы ищете инструменты, построенные вокруг ptrace
. Одним из таких инструментов является strace(1)
терминальное приложение, которое принимает команду в качестве аргумента и выдает:
- система звонит, программа звонит;
- аргументы, используемые для создания системных вызовов;
- результат системных вызовов.
Выход в C-моде. Вот пример:
$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY) = 3
/* ... */
read(3, "hello\n", 32768) = 6
write(1, "hello\n", 6) = 6
read(3, "", 32768) = 0
/* ... */
Там вы видите, что cat test
открываете файл с именем test
, читаете его content ( hello
) и помещаете его в стандартный вывод.
strace
может выдавать много информации, поэтому обязательно прочитайте man-страницу ( man strace
), особенно документацию по -e
выводу, которая позволит вам увидеть только те системные вызовы, которые вас интересуют.
К сожалению, я не знаю графических или простых в использовании альтернатив. Если вы хотите искать их, ptrace
должно быть одно из ваших ключевых слов поиска.
Что касается изоляции, там много технологий. Chroots, контейнеры Linux (которые в настоящее время находятся в стадии разработки и не завершены), виртуализация программного обеспечения и паравиртуализация являются наиболее используемыми. Однако эта тема слишком велика для обсуждения. Я бы предложил открыть новый вопрос, если вы хотите узнать больше.
sandbox somebinary
и воображаемаяsandbox
программа будет записывать все файлы,somebinary
прочитанные или записанные, все IP-адреса / порты, к которым подключены, данные переданы и т. Д. Это было бы полезно иметь, я также хотел бы знать, существует ли что-то подобное (и на самом деле, без такого инструмента наблюдать за программой, работающей на ВМ, было бы бессмысленно, поскольку не могу сказать, что он там делает в любом случае). Хороший вопрос.