PHP - разные open_basedir для каждого виртуального хоста - PullRequest
14 голосов
/ 06 мая 2010

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

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

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

Спасибо заранее Lopoc

Ответы [ 3 ]

18 голосов
/ 06 мая 2010

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

Пример из руководства :

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

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

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

1 голос
/ 16 апреля 2016

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

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

1 голос
/ 06 мая 2010

Вы можете установить множество настроек 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

...