Сегодня я собираюсь попытаться настроить каталог пользователей на сервере Apache. Возникла сложная проблема. Процесс настройки, проблемы и их решения кратко описаны ниже:
1. Обычная конфигурация:
Добавить сеть пользователя:
веб-сайт adduser
веб-пароль
Создайте каталог public_html в каталоге веб-пользователя и установите права доступа 755:
mkdir public_html
chmod 755 public_html -R
Измените /etc/http/httpd.conf:
#
# UserDir: имя каталога, добавляемого к домашнему каталогу пользователя.
# каталог, если получен ~пользовательский запрос.
#
# Путь к каталогу «public_html» учетной записи конечного пользователя должен быть
# доступен для идентификатора пользователя веб-сервера. Обычно это означает, что ~userid.
# должны иметь разрешения 711, ~userid/public_html должны иметь разрешения
№ 755, и содержащиеся в нем документы должны быть доступны для чтения во всем мире.
# В противном случае клиент получит только сообщение «403 Forbidden».
#
# См. также: http://httpd.apache.org/docs/misc/FAQ.html#forbidden
#
<IfModule mod_userdir.c>
#
# UserDir по умолчанию отключен, поскольку он может подтвердить присутствие
# имени пользователя в системе (в зависимости от домашнего каталога)
# разрешения).
#
#UserDir отключить
#
# Чтобы разрешить запросы к /~user/ для обслуживания public_html пользователя
# каталог, удалите строку «UserDir отключить» выше и раскомментируйте
# вместо этого следующую строку:
#
Пользовательский каталог public_html
</ЕслиМодуль>
2. Тестирование и проблемы возникают:
http://127.0.0.1/~веб
================================
Запрещенный
У вас нет разрешения на доступ к /~web на этом сервере.
Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 403 Forbidden.
-------------------------------------------------- ----------------------------------
Сервер Apache/2.0.54 (Fedora) на 127.0.0.1, порт 80
Обычно, когда возникает эта проблема, на ум приходит проблема с разрешением доступа к каталогу. После длительных проверок и корректировок проблема так и не была решена. В этот период я думал, не проблема ли это в Selinux, зашел, осмотрелся, но не нашел ничего, что можно было бы изменить. (Более поздние факты доказывают, что иногда интуиция очень точна. Разница в том, сможете ли вы найти ответ, зачастую заключается в том, углубляетесь ли вы в интуицию).
3. Решение проблемы. После долгого поиска Apache 403 в Google я наконец увидел в блоге, что автор столкнулся с точно такой же проблемой, как и я: конфигурация Apache и каталог были в порядке, но страница могла. не отображаться. Решение состоит в том, чтобы изменить контроль доступа Selinux на public_html.
Используйте следующую команду, чтобы изменить атрибуты безопасности папки
chcon -R -t httpd_user_content_t public_html/
4. Краткое изложение сопутствующих знаний:
Часто задаваемые вопросы по Fedora Core 5 SELinux
http://fedora.redhat.com/docs/selinux-faq-fc5/#faq-entry-public_html Вопрос: Как заставить пользовательский каталог public_html работать под SELinux?
О: Этот процесс предполагает, что вы включили общедоступные HTML-каталоги пользователей в файле конфигурации Apache /etc/httpd/conf/httpd.conf. Этот процесс охватывает только обслуживание статического веб-контента. Дополнительную информацию об Apache HTTP и SELinux см. http://fedora.redhat.com/docs/selinux-apache-fc3/.
Если у вас еще нет каталога ~/public_html, создайте его и заполните обслуживаемыми файлами и папками.
cd ~mkdir public_htmlcp /путь/к/содержимому ~/public_html
На этом этапе httpd настроен для обслуживания содержимого, но вы по-прежнему получаете сообщение об ошибке 403, поскольку httpd не разрешено читать тип безопасности для каталога и файлов, созданных в домашнем каталоге пользователя. Измените файл. контекст безопасности папки и ее содержимого рекурсивно с использованием опции -R:
ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:user_home_t public_htmlchcon -R -t httpd_user_content_t public_html/ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:httpd_user_content_t public_html/ls -Z public_html/- rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t bar.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t baz.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t foo.html
Позже вы можете заметить, что поле пользователя, установленное здесь как user_u, изменено на system_u. Это не влияет на работу целевой политики. Важное поле — это поле типа.
Теперь ваши статические веб-страницы должны обслуживаться правильно. Если у вас по-прежнему возникают ошибки, убедитесь, что логическое значение, которое включает домашние каталоги пользователей, включено. Вы можете установить его с помощью system-config-securitylevel. Выберите вкладку SELinux, а затем выберите «Изменить SELinux». Область политики. Выберите «Разрешить HTTPD читать домашние каталоги». Изменения вступят в силу немедленно.
Анализ используемых команд:
ls -Z -d public_html/
#Показать контекст безопасности файла/каталога -Z, --context
Отображать контекст безопасности, чтобы он подходил для большинства дисплеев. Отображает только режим, пользователя, группу, контекст безопасности и имя файла.-d, --directory.
перечислять записи каталога вместо содержимого и не разыменовывать символические ссылки
chcon -R -t httpd_user_content_t public_html/
#Изменить контекст безопасности файлов/каталогов -R, --recursive
рекурсивно изменять файлы и каталоги-t, --type
установите тип TYPE в целевом контексте безопасности