Это уровень безопасности. Это, как правило, почему вы не можете сделать это при включении к другому контексту (пульт дистанционного управления системой, меняющимися пользователями и т. Д.).
Если у вас есть возможность создавать любую вариабельную необходимую среду, есть любое количество потенциальных способов выполнить произвольный код.
Возьмите $ ld_preload
в качестве примера. Если у вас есть возможность установить эту переменную, вы можете заменить функции библиотеки и придерживаться там кода. Вы можете установить переменную $ дисплей
, и перенаправить X отображение программы, чтобы получить контроль над приложением.
Вот почему такие вещи, как Sudo
, разделяйте среду всех переменных. Sudo
позволяет через несколько выбирать переменные. И из этих переменных он их дезинфицирует (он проходит через переменную $ Term
, но это не будет, если она содержит необычные символы).
Я понятия не имею, как вы хотите использовать такую информацию, но для захвата всех системных вызовов, выполняемых vm, вы должны запустить vm, например:
strace kvm ....
Другой вариант - использовать systemtap.