Heute werde ich versuchen, das Benutzerverzeichnis auf dem Apache-Server zu konfigurieren. Es ist ein schwieriges Problem aufgetreten. Der Konfigurationsprozess, die Probleme und ihre Lösungen sind wie folgt zusammengefasst:
1. Konventionelle Konfiguration:
Benutzerweb hinzufügen:
Adduser-Web
passwd web
Erstellen Sie das Verzeichnis public_html im Webbenutzerverzeichnis und legen Sie die Berechtigungen auf 755 fest:
mkdir public_html
chmod 755 public_html -R
Ändern Sie /etc/http/httpd.conf:
#
# UserDir: Der Name des Verzeichnisses, das an das Home eines Benutzers angehängt wird
# Verzeichnis, wenn eine ~user-Anfrage empfangen wird.
#
# Der Pfad zum Verzeichnis des Endbenutzerkontos muss „public_html“ sein
# zugänglich für die Webserver-Benutzer-ID. Dies bedeutet normalerweise, dass ~userid
# muss die Berechtigung 711 haben, ~userid/public_html muss die Berechtigung haben
# von 755, und die darin enthaltenen Dokumente müssen weltweit lesbar sein.
# Andernfalls erhält der Client nur die Meldung „403 Forbidden“.
#
# Siehe auch: http://httpd.apache.org/docs/misc/FAQ.html#forbidden
#
#
# UserDir ist standardmäßig deaktiviert, da es die Anwesenheit bestätigen kann
# eines Benutzernamens auf dem System (abhängig vom Home-Verzeichnis).
# Berechtigungen).
#
#UserDir deaktivieren
#
# Um Anfragen an /~user/ zu ermöglichen, um das public_html des Benutzers bereitzustellen
#-Verzeichnis, entfernen Sie die Zeile „UserDir deaktivieren“ oben und entfernen Sie den Kommentar
# stattdessen die folgende Zeile:
#
Benutzerverzeichnis public_html
2. Tests und Probleme treten auf:
http://127.0.0.1/~web
================================
Verboten
Sie haben keine Berechtigung, auf /~web auf diesem Server zuzugreifen.
Darüber hinaus ist beim Versuch, ein ErrorDocument zur Bearbeitung der Anfrage zu verwenden, der Fehler 403 Forbidden aufgetreten.
-------------------------------------------------- ----------------------------------
Apache/2.0.54 (Fedora) Server an 127.0.0.1 Port 80
Wenn dieses Problem auftritt, fällt mir im Allgemeinen die Zugriffsberechtigung des Verzeichnisses ein. Nach langer Überprüfung und Anpassung wurde das Problem nicht gelöst. Während dieser Zeit dachte ich darüber nach, ob es ein Problem mit Selinux sei. Ich ging hinein und schaute mich um, fand aber nichts, was ich ändern könnte. (Spätere Fakten beweisen, dass die Intuition manchmal sehr genau ist. Der Unterschied zwischen der Frage, ob Sie die Antwort finden können, besteht oft darin, ob Sie tiefer in die Intuition eintauchen.)
3. Lösung des Problems Nachdem ich lange bei Google nach Apache 403 gesucht hatte, sah ich schließlich in einem Blog, dass der Autor auf genau das gleiche Problem gestoßen war wie ich: Die Konfiguration von Apache und das Verzeichnis waren in Ordnung, die Seite jedoch nicht angezeigt werden. Die Lösung besteht darin, die Zugriffskontrolle von Selinux auf public_html zu ändern.
Verwenden Sie den folgenden Befehl, um die Ordnersicherheitsattribute zu ändern
chcon -R -t httpd_user_content_t public_html/
4. Zusammenfassung des relevanten Wissens:
FAQ zu Fedora Core 5 SELinux
http://fedora.redhat.com/docs/selinux-faq-fc5/#faq-entry-public_html F: Wie sorge ich dafür, dass ein Benutzerverzeichnis public_html unter SELinux funktioniert?
A: Bei diesem Vorgang wird davon ausgegangen, dass Sie öffentliche HTML-Verzeichnisse für Benutzer in Ihrer Apache-Konfigurationsdatei /etc/httpd/conf/httpd.conf aktiviert haben. Weitere Informationen zu Apache HTTP und SELinux finden Sie unter http://fedora.redhat.com/docs/selinux-apache-fc3/.
Wenn Sie noch kein ~/public_html-Verzeichnis haben, erstellen Sie es und füllen Sie es mit den bereitzustellenden Dateien und Ordnern.
cd ~mkdir public_htmlcp /path/to/content ~/public_html
Zu diesem Zeitpunkt ist httpd für die Bereitstellung der Inhalte konfiguriert, Sie erhalten jedoch weiterhin die Fehlermeldung „403 verboten“. Dies liegt daran, dass httpd den Sicherheitstyp für das Verzeichnis und die Dateien nicht lesen darf, da diese im Home-Verzeichnis des Benutzers erstellt werden Sicherheitskontext des Ordners und seines Inhalts rekursiv mithilfe der Option -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
Möglicherweise stellen Sie zu einem späteren Zeitpunkt fest, dass das Benutzerfeld, das hier auf „user_u“ festgelegt ist, in „system_u“ geändert wird. Dies hat keinen Einfluss auf die Funktionsweise der Zielrichtlinie. Das Feld, das zählt, ist das Typfeld.
Ihre statischen Webseiten sollten jetzt korrekt bereitgestellt werden. Stellen Sie sicher, dass der boolesche Wert, der Benutzer-Home-Verzeichnisse aktiviert, aktiviert ist. Wählen Sie die Registerkarte „SELinux“ und dann „Ändern“ aus Richtlinienbereich. Wählen Sie HTTPD das Lesen von Home-Verzeichnissen zulassen. Die Änderungen werden sofort wirksam.
Analyse der verwendeten Befehle:
ls -Z -d public_html/
#Zeigen Sie den Sicherheitskontext der Datei/des Verzeichnisses an -Z, --context
Sicherheitskontext anzeigen, sodass er auf die meisten Anzeigen passt. Zeigt nur Modus, Benutzer, Gruppe, Sicherheitskontext und Dateinamen an.-d, --directory
Listen Sie Verzeichniseinträge anstelle von Inhalten auf und dereferenzieren Sie keine symbolischen Links
chcon -R -t httpd_user_content_t public_html/
#Ändern Sie den Sicherheitskontext von Dateien/Verzeichnissen -R, --recursive
Dateien und Verzeichnisse rekursiv ändern-t, --type
Legen Sie den Typ TYPE im Zielsicherheitskontext fest