PHP - другой open_basedir для каждого виртуального хоста

Я столкнулся с этой проблемой, у меня есть работающий apache и php. У нас много виртуальных хостов, но мы заметили, что потенциально злонамеренный пользователь может использовать свое веб-пространство для просмотра других пользовательских файлов (через простой PHP скрипт) и даже системных файлов, это может произойти из-за прав доступа php. Способ избежать этого заключается в том, чтобы установить open_basedir var в php.ini, yhis очень прост в одной системе хоста, но в случае виртуальных хостов на каждом хосте будет basebir.

Хо могу ли я установить dis basedir для каждого пользователя/хоста? есть ли способ позволить apache присвоить php-привилегии php файла, который был запрошен

например. /home/X _USER/index.php имеет владельца X_USER, когда apache читает файл index.php, он проверяет свой путь и владельца, просто я ищу системный набор переменной php basedir для этого пути.

Благодарим заранее Lopoc

Ответ 1

Можно установить open_basedir для каждой директории, используя директиву php_admin_value Apache.

Пример из manual:

<Directory /docroot>
  php_admin_value open_basedir /docroot 
</Directory>

Повторите свой комментарий: да, внешние команды не подвержены влиянию open_basedir - при вызове ls / это выполняется с правами, которыми управляет PHP-страница пользователя (часто называемая www или аналогичный). Насколько мне известно, расширение open_basedir на внешние команды невозможно.

В этом случае я не думаю, что вид защиты, который вы ищете, возможен в обычной настройке Apache/PHP. Единственное, что может приблизиться, - это запуск Apache в тюрьме chroot. Я не сделал этого сам, поэтому не могу ничего сказать об этом - вам придется врываться и, возможно, задать вопрос конкретно об этом.

Ответ 3

chroot - хорошая идея. И теперь докер более эффективен.

и open_basedir с "/docroot" не является безопасностью, вы должны завершить "/", или PHP может получить доступ/docroot1