Настройка open_basedir в php

TOP-ic

Местный
Сообщения
35
Реакции
26
Баллы
183
При выборе аватара выскакивает ошибка. Форум после восстановления, но данный плагин переустанавливал и все равно ошибка.
error.jpg
 
open_basedir в php надо настраивать, нет доступа для записи во временную папку которая находится по пути: /home/admin/tmp
Такая ошибка может быть не только у этого приложения, а любого другого, которому требуется переменная open_basedir
 
open_basedir в php надо настраивать, нет доступа для записи во временную папку которая находится по пути: /home/admin/tmp
Такая ошибка может быть не только у этого приложения, а любого другого, которому требуется переменная open_basedir
Это дать полные права папке?
 
Функция PHP open_basedir — это мера безопасности, которая предотвращает открытие файлов и скриптов, которые находится вне «домашней» директории. Если настройка PHP open_basedir включена, то все файловые операции ограничиваются одной папкой на сервере, не допуская доступа к скриптам неавторизованных пользователей. Когда скрипт пытается открыть файл, который находится вне корневой директории, например fopen() или gzopen(), проверяется путь у файлу. Когда файл находится вне разрешенной директории, PHP откажет в его выполнении и появится ошибка, вида:
Код:
is not within the allowed path(s): (/home/user_name:/usr/lib/php:/usr/local/lib/php:/tmp)
Есть три способа решения проблемы:
  1. Решением может послужить отключение этой функции, либо разрешение доступа к файлам некоторым привилегированным учетным записям, либо же разрешить доступ PHP скриптам к некоторым папкам.
  • Если Вы используете cPanel WebHost Manager (WHM), Вы можете легко отключить опцию open_basedir, или исключить некоторых пользователей из списка, для разрешения им доступа. В секции “Security” откройте “Tweak Security”, затем нажмите “Configure” для “Php open_basedir Tweak”. Здесь Вы можете включить или отключить php фунцию open_basedir, добавить или убрать некоторые хосты.
  • Если Вы используете панель управления хостингом Plesk, Вам нужно будет вручную отредактировать файл конфигурации Apache — vhost.conf и vhost_ssl.conf, и добавить или изменить линии php_admin_value open_basedir на следующие:
php_admin_value open_basedir none php_admin_value open_basedir /full/path/to/dir:/full/path/to/directory/httpdocs:/tmp
Пути к папкам (вверху пример), которые находятся после open_basedir, это директории, к которым разрешен доступ для PHP скриптов на сервере. Вы можете добавить сюда больше файлов и папок, разделяя их двоеточием “:”. Будьте внимательны, чтобы не нарушить безопасность Вашей системы.​

После завершение, запустите команду ниже, чтобы изменения вступили в силу и перезапустите Apache httpd сервер (apache2ctl restart или httpd restart)​

2. Если нужно вручную отредактировать настройки Apache, чтобы выключить защиту PHP open_basedir, откройте файл httpd.conf, найдите линию, которая начинается так:​

php_admin_value open_basedir …..
Чтобы отключить функцию для определенной учетной записи на сервере, используйте следующую строчку:
php_admin_value open_basedir none
3. Вы всегда можете ограничить защиту для определенных папок, без его полного отключения функции open_basedir. Для этого просто внесите список разрешенных папок, разделяя их двоеточием. Например, для разрешения доступа к директории /new_directory код будет таким:​

php_admin_value open_basedir “/home/user_account/:/usr/lib/php:/usr/local/lib/php:/tmp” php_admin_value open_basedir “/home/user_account/:/usr/lib/php:/usr/local/lib/php:/tmp:/new_directory”
Перезапустите Apache сервер. Обратите внимание, что ограничение ввреху, это только префикс, а сама папка. Т.е. использование, к примеру, “open_basedir = /dir/incl” также откроет доступ к папкам “/dir/include” или “/dir/incls”, если таковые имеются. Для ограничения доступа только к одной специфической директории, используйте слеш в конце: “open_basedir = /dir/incl/”.
Приблизительные варианты.
 
Оооо как! Но возникли вопросы. Почему раньше работала и не надо было делать настройки basedir`а? И чем нам грозит если мы снимем защиту папок?
И я так понимаю у меня папка открыта. php_admin_value open_basedir /home/admin/web/ru-topserver.ru/public_html:/home/admin/tmp

А вообще вот мои строки которые относятся к проблеме.
php_admin_value open_basedir /home/admin/web/ru-topserver.ru/public_html:/home/admin/tmp
php_admin_value upload_tmp_dir /home/admin/tmp
php_admin_value session.save_path /home/admin/tmp
 
Последнее редактирование:
Функция PHP open_basedir — это мера безопасности, которая предотвращает открытие файлов и скриптов, которые находится вне «домашней» директории.
Судя по тому что написано в умных источниках, путь до папки лучше разместить в там где проект или на уровень выше как в ISP например, т.е если проект тут
Код:
php_admin_value open_basedir /home/admin/web/ru-topserver.ru/public_html
то папку для выполнения скриптов можно разместить тут
Код:
php_admin_value open_basedir /home/admin/web/tmp
или тут
php_admin_value open_basedir /home/admin/web/ru-topserver.ru/tmp
Если один проект не чем я так думаю, а вот если несколько будет то соответственно взломом других проектов.
Вот не большая статья просто для развития:
 
Решил проблему только отключением, менял расположени папки tmp, ничего не дало, таже ошибка.
Заменил на php_admin_value open_basedir none и все заработало.
 
Назад
Верх Низ