Назад | Перейти на главную страницу

SELinux вмешивается в работу Apache / PHP

В моей установке CentOS 7 SELinux включен по умолчанию. Это мешает Apache правильно читать файлы PHP в стандартном корне документа / var / www / html (браузер пуст при отображении веб-страниц, содержащих скрипт PHP). Когда я отключаю SELinux, страницы отображаются нормально.

Есть ли способ настроить SELinux, чтобы разрешить Apache доступ к файлам PHP из корня документа? Я бы предпочел не отключать SELinux полностью, учитывая, что CentOS явно считает, что это желательное дополнение безопасности.

Я не особо много пользуюсь SELinux, но вы можете попробовать

semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html(/.*)?'

restorecon -R -v /var/www/html/

Это позволяет Apache выполнять сценарии PHP в этом каталоге и сохраняется после перезагрузки.

Если вы используете MySQL, возможно, вам придется сделать то же самое. SELinux: разрешить Apache разговаривать с MySQL на CentOS может помочь

Бег audit2allow < /var/log/audit/audit.log подтвердил, что httpd блокируется SELinux (см. эта ссылка). Решением было создать и применить модуль политики, выполнив следующие действия:

  1. Как root запустите команду audit2allow -a -M my_httpd (замените my_httpd на любое имя).
  2. Снова как root, запустите команду semodule -i my_httpd.pp установить модуль.

После того, как я выполнил эти шаги, Apache смог без проблем запускать PHP-скрипты на моем сервере. Перезагрузка сервера не отменяет изменений.

Содержимое файла модуля (my_httpd.te):

module my_httpd 1.0;
require {
    type admin_home_t;
    type httpd_t;
    class file { read getattr open };
}
#============= httpd_t ==============
allow httpd_t admin_home_t:file { read getattr open };