Настройка open_basedir на примере VestaCP

В некоторых панелях управления сервером, например VestaCP по-умолчанию директива open_basedir настроена только на запуск php-скриптов внутри директории public_html у домена. Но т.к. ради безопасности нам необходимо разместить файлы проекта выше www, то open_basedir необходимо перенастроить. В противном случае, мы постоянно будем получать ошибку вида File ... is not within the allowed path(s).

Можно поменять настройку в основном php.ini распрстранив, таким образом, изменения на весь сервер. Если вы забыли где лежит файл конфигурации то воспользуйтесь командой

$ php -i | grep php.ini

Допустим, нас интересует решение для конкретного домена, а не сервера целиком. На форуме весты есть такое решение: создайте в дополнительный конфигурационный файл /home/%user%/conf/web/httpd.%domain%.conf в котором будет прописано:

    <Directory /home/%user%/web/%domain%/public_html>
        php_admin_value open_basedir none
    </Directory>

Но полностью отключать настройку не всегда безопасно, к тому же, если присмотреться, то в директории /home/%user%/conf/web/ можно найти файл apache2.conf

Открываем его, например, с помощью nano (не забывайте добавлять папаметр -w при открытии конфигурационных файлов)

nano -w home/user/conf/web/apache2.conf

В нём в разделе Directory есть строчка вида

php_admin_value open_basedir /home/user/web/domain/public_html:/home/user/tmp

Здесь указано 2 разрешённых пути, двоеточие - это разделитель между ними. Например, мы хотим разрешить выполнение php в папке project на один уровень выше веб-директории public_html, тогда добавляем в конце строки:

:/home/user/web/domain/project

Сохраняем изменения Ctrl+O, выходим Ctrl+X. Теперь перезапустим апач что бы новые настройки вступили в силу:

etc/init.d/apache2 restart

Всё готово, если что-то не работает ищите опечатку.

Linux