Как добавить путь open_basedir в nginx vhost

В php.ini я установил

open_basedir = /home/user/web/

Теперь я хотел бы запустить phppgadmin на поддомене, который должен включать файлы из / usr / share / phppgadmin.
Поэтому я добавил следующую строку в nginx-config для этого хоста:

fastcgi_param PHP_VALUE open_basedir="/home/user/web/:/usr/share/phppgadmin/";

и перезапустил nginx. Однако я не могу получить доступ к сайту из-за следующей ошибки:

[ошибка] 31440#0: *1 FastCGI отправлено в stderr: "Предупреждение PHP: include_once(): действует ограничение open_basedir. Файл (/usr/share/phppgadmin/libraries/lib.inc.php) находится вне допустимого пути (s): (/ home / user / web /) в /usr/share/phppgadmin/info.php в строке 10

В чем может быть причина того, что 2-й путь здесь не указан? Что еще мне нужно, чтобы добавить open_basedir к виртуальному хосту? Я использовал только файл по умолчанию в / sites-available.

edit Всегда думай о перезапуске fpm...

service php5-fpm restart

2 ответа

Решение

Для вашей конкретной ситуации вы должны рассмотреть возможность добавления /usr/share по умолчанию open_basedirТак как все, что там есть, предназначено для прочтения миром в любом случае.

Кроме того, open_basedir легко обойти, если вы не заблокированы shell_exec, exec, system и аналогичные функции PHP, так что не считайте безопасным для его использования (я знаю, это отстой).

Если вам интересно, как вы можете легко обойти это, вы можете просто system('php -n ascript.php');, -n не приведет к чтению PHP.ini, поэтому нет open_basedir будет применяться.

Просто к вашему сведению, если у вас установлены конфиги nginx для нескольких vhosts (так, конфиги в /etc/nginx/sites-enabled/example.com) тогда вам может понадобиться установить fastcgi_param PHP_VALUE open_basedir= там:

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_param PHP_VALUE open_basedir="/var/www/:/new/path";
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;

Настройка open_basedir с помощью fastcgi_param может вызвать некоторые проблемы, когда на вашем сервере несколько сайтов.

Другой вариант - использовать .user.ini.

Другие вопросы по тегам