2009-04-02 6 views
0

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

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

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

ответ

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

Веб-хостинг Я использовал для умеренного использования этот тип ограничений. Он работает, хотя он предотвращает работу нескольких скриптов. Я использую mod_vhost_alias, поэтому я не могу просто добавить другой open_basedir для каждого пользователя. Есть ли лучший способ сделать это? –

+0

Я тестировал его на другом сервере, и он не позволит мне chdir из разрешенных путей open_basedir. –

0

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

+0

Я помещаю его в главный httpd.conf (правый :) :). Я не могу поместить его в php.ini, потому что у меня есть 2 экземпляра Apache с одним и тем же двоичным кодом, и они должны иметь разные конфигурации. –

+0

В этом случае описание вашей проблемы не имеет смысла - с одной стороны, это работает, если положить в httpd.conf и не работает, когда в php.ini. Но, с другой стороны, вы никак не можете поместить его в php.ini. Так в чем проблема? –

+0

Он НЕ работает в httpd.conf. Извините за то, что я не понимаю. –

2

Это может быть глупое предложение, но вы перезапустили веб-сервер после внесения изменений в 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 было эффективным. Убедитесь, что у вас есть параметры «AllowOverride» или «AllowOverride All», установленные в конфигурации Apache для вашего сервера или виртуального хоста.

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

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

1

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

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

Обратите внимание, что косая черта здесь, чтобы предотвратить пользователя «имя пользователя» Если доступ к " username2 ".

+1

не нужны ни двойные кавычки, ни косые черты. – wlf

Смежные вопросы