Вчера я провел 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 касались только проблем с правами на папку, которые не были в моем случае.
( практично ) Как я могу предоставить разрешения на удаление-удаление обновлений Apache httpd в каталоге без полного отключения SELinux?
( теоретический ) Что такое 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
Надеюсь, некоторые из этих фрагментов и информации будут вам полезны, и это не просто бред безумного человека.