По соображениям безопасности некоторые приложения изолированы в среде chroot. Мне нужно вызвать эти приложения через PHP-скрипт. Что-то вроде того :
exec('chroot /path/to/chroot command')
Мне нужно быть root
для использования chroot
. В руководстве PHP есть chroot (), но для этой функции также требуются привилегии root.
Итак, как использовать команды chroot
ed в PHP?
chroot
может вызываться только привилегированными пользователями. В противном случае обычные пользователи могут обманывать приложения setuid, такие как passwd
или sudo
доступа к файлам в непредвиденном месте.
Поэтому, если ваше приложение php не работает от имени пользователя root, одна вещь, которую вы можете сделать, – это установить сценарий оболочки setuid и вызвать это из php. Он должен немедленно отказаться от привилегий после вызова chroot, поскольку root может тривиально вырваться из chroots .
Кроме того, вы можете настроить sudo, чтобы пользователь php мог выполнить chroot /path/to/chroot command
и добавить sudo
к вызову exec
в php.
Вы можете использовать возможности Linux. См. Возможности CAP_SYS_CHROOT для возможностей man capabilities
.
ПРЕДУПРЕЖДЕНИЕ! Используя sudo, после chrooting вы root!
Трюк здесь состоит в том, чтобы использовать sudo и файл sudoers, чтобы просмотреть man-страницу sudo .
В основном, что бы вы сделали, это предоставить вашему PHP-пользователю доступ к утилите sudo
для команды chroot
и ваш код будет выглядеть следующим образом:
exec('sudo chroot /path/to/chroot command')