Если вы используете chroot()
, вы должны учитывать последствия того, что вы делаете. Одним из основных последствий является то, что многие (большинство, все) обычно доступных команд недоступны, если вы не сделаете их доступными в среде chroot()
.
Правильно выполнять эту работу нетривиально. Вам может потребоваться, чтобы части /dev
, /bin
, /etc
, /usr
, /lib
(и, возможно, другие тоже) были установлены соответствующим образом в новом корневом каталоге. Символические ссылки обратно «вне среды chroot()
», как правило, не будут работать. Вы должны сделать копии того, что важно. Один из побочных эффектов всего этого: /tmp
очень редко является подходящим местом для создания полностью операционной среды chroot()
. Возможно, вам подойдет подкаталог с ограниченным доступом в /tmp
, но помещение пользователя в /tmp
не очень хорошо изолирует его от других пользователей или других пользователей.
Еще одна важная возможность: вы не предоставляете пользователю доступ к другим командам после выполнения chroot()
. То есть вы не пытаетесь использовать system()
в своем коде; и вы не предоставляете жертве пользователю доступ к оболочке или утилитам оболочки.
Использование chroot()
- это не то, что вы делаете случайно, другими словами. Чтобы хорошо выполнять свою работу, нужно тщательно продумать и подготовиться.
Не лучше ли вам использовать какой-нибудь контейнер или виртуальную машину?
Используйте Google или любую другую поисковую систему для поиска таких терминов, как:
- «Побег из тюрьмы»
- 'chroot jail setup'
- 'chroot jail vs docker'
Можно ли выйти из chroot
, затем выполнить команду и снова вернуться к chroot
?
Не совсем. Вы можете иметь управляющую программу, которая разветвляет дочерний элемент, который выполняет chroot()
и обрабатывает материал, а затем завершает работу, так что управляющая программа может выполнять свою работу (выполнять команду), а затем вы можете разветвить другого дочернего элемента, который возвращается в chroot()
тюрьма. Но это не то же самое, что текущий процесс выхода из тюрьмы - это сделает chroot()
полностью неэффективным, если какая-либо программа может отменить время тюрьмы по прихоти и возобновить неопознанную активность.