open_basedir не имеет никакого эффекта - PullRequest
0 голосов
/ 02 апреля 2009

Для моей панели веб-хостинга пользователям необходимо заблокировать доступ к файлам вне их собственного каталога (/var/www/u/s/username). Я пытался использовать эту строку в httpd.conf, чтобы люди не могли зайти в каталог.

<Directory /var/www/users/>
php_admin_value open_basedir .:/usr/lib/php5
</Directory>

Но в php.ini это, похоже, не имеет никакого эффекта. Что я делаю не так?

Ответы [ 4 ]

2 голосов
/ 03 апреля 2009

Возможно, это глупое предложение, но перезапустили ли вы веб-сервер после внесения изменений в php.ini?

Другой метод, который вы можете попробовать использовать, - добавить файл с помощью директивы auto_prepend_file, чтобы включить скрипт для ужесточения директивы open_basedir к каталогу текущих пользователей:

Из PHP.net (http://www.php.net/manual/en/ini.sect.safe-mode.php)

Начиная с PHP 5.3.0 open_basedir можно сжать во время выполнения. Это означает, что если open_basedir установлен в / www / в php.ini, сценарий может сжать конфигурацию до / www / tmp / во время выполнения с помощью ini_set ()

ДОПОЛНИТЕЛЬНОЕ ПРЕДЛОЖЕНИЕ:

Конфигурация Apache должна быть настроена правильно, чтобы переопределения INI были эффективными. Убедитесь, что в настройках Apache для вашего сервера или виртуального хоста установлены «AllowOverride Options» или «AllowOverride All».

http://us2.php.net/configuration.changes

http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

1 голос
/ 14 апреля 2009

Возможно, вам понадобится добавить строку для каждого пользователя Directory:

<Directory /var/www/u/s/username>
php_admin_value open_basedir "/var/www/u/s/username/:/shared/path/"
</Directory>

Обратите внимание, что завершающий слеш здесь запрещает пользователю "username" обращаться к каталогу "username2".

0 голосов
/ 02 апреля 2009

Скорее всего, вы изменяете неправильный "php.ini".

0 голосов
/ 02 апреля 2009
  1. Насколько я могу судить, он не в формате пути, это должен быть только один каталог;
  2. Использование "." с open_basedir не имеет никакого смысла, "." это всегда текущий каталог. Вы можете chdir('/wherever/you/want'), имея "." расширен как /wherever/you/want
...