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. Я не сделал этого сам, поэтому не могу ничего сказать об этом - вам придется врываться и, возможно, задать вопрос конкретно об этом.
Ответ 2
Вы можете установить множество настроек php.ini с помощью файла конфигурации Apache.
См. соответствующие страницы из руководства по PHP:
- http://php.net/manual/en/configuration.changes.php
- http://www.php.net/manual/en/ini.core.php#ini.sect.path-directory
- http://www.php.net/manual/en/configuration.changes.modes.php
Ответ 3
chroot - хорошая идея. И теперь докер более эффективен.
и open_basedir с "/docroot" не является безопасностью, вы должны завершить "/", или PHP может получить доступ/docroot1