Ich habe mit Webmin den folgenden virtuellen Host erstellt:
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
Und beim Neustart von Apache bekomme ich
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
Die Sache ist, das Verzeichnis existiert absolut. Ich starre genau hin. pwd
zeigt mir, dass dies mein aktuelles Verzeichnis ist usw. Es ist nicht so schwer, es richtig zu buchstabieren. Ich kann keine anderen Fehler oder Warnungen in den httpd-Protokollen finden. apache: apache besitzt das Verzeichnis und alle Unterverzeichnisse / Dateien. Hier sind keine Symlinks oder irgendetwas involviert. Was fehlt mir oder worauf sollte ich noch achten, um festzustellen, warum das so ist?
Betriebssystem ist CentOS 6.0
apache-2.2
centos
Jake Wilson
quelle
quelle
DocumentRoot
Dies gibt Ihnen möglicherweise einen Einblick in die Darstellung des Webservers. Vielleicht möchten Sie auch die anderen Verzeichnisse entlang des Pfads überprüfen, aber wenn es wirklich darunter ist/var/www/
, sollte dies kein Problem seinAntworten:
Das erste, was mir in den Sinn kam, ist, dass Apache die Berechtigung hat, auf dieses Verzeichnis zuzugreifen.
Außerdem: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
quelle
apache:apache
, aber ich bin diesem Link gefolgt (aus irgendeinem Grund auf SO?) Und in der Tat war SELinux das Problem. SELinux verursacht mehr Probleme, als es imo gut tut.setenforce 0
behoben, aber in Bezug auf die Berechtigungenls-laZ
hat der Symlink die gleichen Berechtigungen wie andere Dateien, auf die er zugreifen kann, abgesehen von chmod. Die Dateien sind -rw-r - r-- und der Symlink ist lrwxrwxrwx. Könnte das der Grund sein, warum es mit setenforce 1 nicht funktioniert?Hier ist ein Tutorial-Ansatz für den SELinux-Fall:
Finden Sie heraus, ob SELinux aktiv ist:
In diesem Fall kann eine vergleichende Überprüfung hilfreich sein. Zum Beispiel hat ein Server einen Standard-DocumentRoot unter
/var/www/html
, aber wir möchten ihn woanders haben/path/to/document/root
.Wenn SELinux nicht aktiv mit der Ressource kommuniziert, wird
ls -dZ
im Verzeichnis Folgendes angezeigt:Wenn SELinux-Kontexte angewendet werden,
ls -dZ
sieht dies eher so aus:Wenn wir es mit einem funktionierenden DocumentRoot vergleichen, würde es ungefähr so aussehen:
Die Argumente
_r
und_t
beziehen sich auf-r
(--role
und-t
(--type
) aufchcon
. Hier ist eine reduzierte Manpage:Auf den ersten Blick scheint das Folgende zu funktionieren, aber möglicherweise nicht.
Wenn der Webserver den DocumentRoot weiterhin nicht sehen kann, beachten Sie, dass der Kontext bis zum Root-Verzeichnis von Bedeutung ist:
Zu diesem Zeitpunkt kann der Webserver das Verzeichnis sehen.
Ja, ich habe heute Abend auf die harte Tour gelernt.
HINWEIS: Die konzeptionelle Verwendung von chcon hat laut RedHat-Dokumentation ( 5.6.1. Temporäre Änderungen: chcon ) folgende Nachteile :
Verwenden Sie semanage und restorecon , um dauerhaftere Änderungen vorzunehmen. Ein kurzes Beispiel:
Beachten Sie in Bezug auf restorecon , dass -F erforderlich ist, um den gesamten Kontext (dh Benutzer und Typ) zu beeinflussen. Auch -R Mittel , um Änderungen rekursiv zu machen. Die Argumente -v oder -p können den Fortschritt entweder ausführlich oder knapp anzeigen. Verwenden Sie -FRnv, um zu sehen, was passieren würde, ohne Änderungen vorzunehmen.
Sobald semanage auf diese Weise verwendet wird, können lokale Sicherheitsänderungen mit einem Befehl wie dem folgenden angezeigt werden :
Die Ausgabe des Semanage-Exports kann gespeichert und vom Semanage-Import verwendet werden, um das Anwenden einer Reihe von Änderungen auf verschiedene Systeme zu vereinfachen.
HINWEIS: Diese Antwort bietet einen grundlegendsten Typkontext für eine Site. Sicherheit kann viel detaillierter sein. Eine Liste der Typen, die auf Webserverseiten angewendet werden können, finden Sie beispielsweise mit folgenden Befehlen:
HINWEIS: Dienstprogramme wie semanage und seinfo werden möglicherweise nicht standardmäßig installiert. Zumindest bei einigen Distributionen können erforderliche Pakete wie folgt benannt werden:
quelle
Es klingt wie SELinux. Ich würde vorschlagen, dass Sie damit arbeiten. Suchen Sie im Verzeichnis / var / log / audit nach einer Bestätigung.
Schlimmer noch, Sie können Selinux immer ausschalten, wie bereits erwähnt, aber ich schlage vor, Sie arbeiten stattdessen damit. Wenn ich zum Beispiel ein Verzeichnis zur Verwendung mit Apache erstellen würde, hätte es nicht den richtigen Kontext, wie hier angegeben.
In diesem Fall wende ich einfach den Kontext aus einem anderen Verzeichnis an, in diesem Fall HTML:
quelle
Verwenden Sie diesen Befehl in root, um den Sicherheitskontext von "httpd_sys_content_t" zu ändern, der die Ausführung von Apache ermöglicht.
Hiermit können Sie
ls -dZ /var/www/whatever
die Details der Sicherheitsrollen anzeigenquelle