Я знаю, что этот вопрос должен был быть задан (и дан ответ) раньше, но я не могу найти решения своей проблемы ни в одном из этих вопросов. Это немного странно ... Проблема в том, что мои сценарии PHP (и мой сервер Apache) не могут записывать в папки в моей системе. Не за что.
Например, при запуске скрипта я получаю следующую ошибку:
Неустранимая ошибка: неперехваченное исключение Zend_Session_Exception с сообщением Zend_Session :: start () - /var/www/subdomains/vmb/vendor/zendframework/zendframework1/library/Zend/Session.php(Line:482): Error # 2 session_start (): открыть (/ var / www / subdomains / vmb / application /../ var / session / sess_ingph33ir4shr1e60kkifp37s7, O_RDWR) не удалось: отказано в разрешении (13)
У меня есть VPS с CentOS 7, Apache2.4, PHP5.6 (который работает с модом apache php) и некоторыми другими вещами. Apache запускается как пользовательский apache и групповой apache (как установлено в файле httpd.conf). Я установил session_path
в обоих /etc/php.ini
и /etc/httpd/conf.d/php.conf
к /tmp/phpsessions
и chown'd / chmod 'эту папку как apache: apache 777. В приведенном выше примере сеансы хранятся в другой папке (которая также chown'd / chmod' как apache: apache 777), но я получаю ту же ошибку для других папок.
Итак, мой сервер apache работает как apache: apache, я пересылаю нужные мне папки в apache: apache, и даже с разрешениями 777 Apache не может записывать в эти папки.
Вы когда-нибудь видели что-то подобное? Я раньше не ...
при условии, что разрешения и права собственности в порядке, я считаю, что это относится к SELinux
.
Быстрый и грязный способ: ... при условии, что вы получаете Permissive
во время пробежки getenforce
, попробуйте отключить SELinux
бегом setenforce 0
и снова нажмите свой скрипт, если он работает, значит, он был SELinux
, оттуда вы можете либо оставить его отключенным (не рекомендуется), либо снова включить, запустив setenforce 1
и проверь свой /var/log/audit/audit.log
и работаем над окончательным решением.
Отказ от SELinux из-за некоторых проблем с конфигурацией кажется плохим выбором. Вместо этого я бы посоветовал потратить немного времени на то, чтобы познакомиться с этим и найти подходящее решение. В этом случае, похоже, решением может быть установка httpd_sys_rw_content_t (обратите внимание на 'w' для записи) контекст файла в папке, которая вам нужна для записи. Имейте в виду, что selinux fcontext принимает регулярные выражения для целей, поэтому ваша команда, вероятно, будет выглядеть примерно так:
semanage fcontext --add \
-t httpd_sys_rw_content_t \
'/var/www/subdomains/vmb/var/session(/.*)?'
Регулярное выражение применяет правило контекста ко всем файлам в каталоге сеанса, а также к самому каталогу.
Примените политику (нужно только один раз) к каталогу и всем файлам в нем:
restorecon -R /var/www/subdomains/vmb/var/session
Могло быть много других вещей, но это, по крайней мере, сработало для меня.