SELinux влияет "не удалось открыть поток: Permission denied" Ошибка PHP

Вчера я провел 5 часов прямо, обнаружив, казалось бы, необоснованную ошибку «не удалось открыть поток, разрешенное разрешение», которое происходило после любых операций записи в файловую систему: fopen (с флагами «w» и «a»), move_uploaded_file, file_put_contents.

Я перепроверял много раз, когда владельцы каталогов (user и group – chown, chgrp) имеют атрибуты папок изменений для незащищенных 777 (rwx с chmod ), но это не имеет никакого эффекта. Я даже переустановил Apache и PHP, но все равно столкнулся с такой же ошибкой.

Поскольку после нескольких часов чтения различной документации происходило ошибка, автоматически устанавливались ограничения SELinux для службы Apache httpd. Я просто отключил SELinux, отредактировав файл /etc/selinux/config на своей Fedora (выпуск 20) с помощью смены строки:

 SELINUX=enforcing 

в

 SELINUX=disabled 

Я перезапустил свой компьютер и эта неприятная ошибка окончательно исчезла.

Я должен заметить, что все вопросы в Stack Overflow относительно проблемы «отказа в доступе» в среде LAMP касались только проблем с правами на папку, которые не были в моем случае.

  1. ( практично ) Как я могу предоставить разрешения на удаление-удаление обновлений Apache httpd в каталоге без полного отключения SELinux?

  2. ( теоретический ) Что такое SELinux? Для чего он предназначен? Почему (по какой причине) он был создан? Почему я должен использовать его? Есть ли причина, позволяющая включить SElinux на локальной dev-машине?

только для модераторов ресурса: я знаю, что эта проблема охватывает больше администрирования, чем фактическое программирование, но я уверен, что это влияет на разработчиков гораздо более серьезным образом, чем на начинающих администраторов, поэтому выбор между SuperUser и StackOverflow я взял на себя. Однако вам решать, переместить вопрос в SuperUser или сохранить в этом месте.

    Я не эксперт, но у меня было несколько проблем с SELinux. Я прочитал несколько статей, и из того, что я могу собрать, SELinux – это еще один уровень безопасности для вашего сервера, и на самом деле его нужно оставить, а не отключить из-за незнания (это была цитата, которую я читал, а не мои слова). Я нашел этот сайт полезным, а также комичным, и он, вероятно, даст вам больше информации, чем когда-либо.

    http://stopdisablingselinux.com/

    Несколько вещей, с которыми я столкнулся, я расскажу:

    Вы можете проверить текущие разрешения SELinux с помощью следующей команды:

     ls -lZ 

    Вы можете установить разрешения SELinux с помощью следующей команды:

     chcon unconfined_u:object_r:httpd_user_content_t:s0 

    Вы можете использовать подстановочный знак для изменения всех файлов в каталоге, например:

     chcon unconfined_u:object_r:httpd_user_content_t:s0 * 

    Вы можете установить разрешения для всех файлов и каталогов рекурсивно, используя это (это команда, которая, скорее всего, исправит вашу проблему с разрешениями, вы должны избегать 777, например, чумы):

     chcon -R unconfined_u:object_r:httpd_user_content_t:s0 * 

    Если вы хотите использовать домашние каталоги для обслуживания сайтов или приложений, вам необходимо выполнить эту команду:

     setsebool -P httpd_enable_homedirs=1 

    У меня были проблемы с fsockopen on centos с Selinux, и мне пришлось использовать следующее (-P делает это изменение постоянным, вам тоже понадобится эта команда):

     setsebool -P httpd_can_network_connect 1 

    Вы можете видеть, какие флаги установлены в HTTPD:

     sestatus 

    Я думаю, что последнее, что у меня была проблема с аутентификацией с открытым / закрытым ключом на сервере, и мне нужно было запустить эту команду, чтобы исправить ее (это известная ошибка, которую я считаю):

     restorecon -R -v /home 

    Надеюсь, некоторые из этих фрагментов и информации будут вам полезны, и это не просто бред безумного человека.