Apache-Server gegen Attacken schützen

Workshop - Linux-Webserver richtig abschotten

17.11.2011
Von Thomas Hümmler

Lese- und Schreibrechte für den Apache

Um das Ändern von Programmdateien zu verhindern, setzen schon die Standarddistributionen die Lese- und Schreibrechte sinnvoll. Wer Apache aber aus den Quellen installiert, muss aber auf die korrekten Verzeichnis- und Dateirechte achten. Welche Verzeichnisse das bei welcher Distribution beziehungsweise bei welchem Betriebssystem betrifft, steht detailliert im Apache-Wiki.

Der Apache-Server muss alle seine Konfigurationsdateien lesen können. Ebenso alle Dateien, die er darstellen soll - das betrifft sowohl HTML- und CSS-Dateien als auch verlinkte Dokumente und Bilder. Der Webserver beziehungsweise der dafür vorgesehene Benutzer (unter Debian und Ubuntu ist das www-data) sollte die Konfigurationsdaten allerdings nicht schreiben können. Daher sollte der Webserver auch nicht der Eigentümer der Konfigurationsdaten sein. Das bedeutet, wenn Sie den Webserver mithilfe der Quellen installieren: Legen Sie als Besitzer der Konfigurationsdateien root fest. Die Gruppe und alle anderen erhalten nur Leserechte. Das geschieht mithilfe des Befehls

chmod 644 APACHE-KONFIGURATIONSDATEI(EN)

Normalerweise läuft der Webserver als root und schaltet erst dann auf den mit der User-Direktive bezeichneten Nutzer um. In dem Fall braucht er nicht einmal spezielle Schreibrechte für seine Log-Dateien. Für CGI- oder PHP-Skripte, die der Webserver ausführt, gilt: Diese benötigen keine Ausführungsrechte, denn sie werden vom Webserver interpretiert und ausgeführt.

Überblick: Im Apache-Wiki ist für jede Distribution und jedes Betriebssystem aufgeführt, wo die Konfigurationsdaten des Webservers zu finden sind.
Überblick: Im Apache-Wiki ist für jede Distribution und jedes Betriebssystem aufgeführt, wo die Konfigurationsdaten des Webservers zu finden sind.

Content-Management-Systeme (CMS) und andere Webanwendungen, die mithilfe eines Webbrowsers verwaltet und mit Inhalten versehen werden, verlangen indes Schreibrechte für den Webserver-User auf bestimmte Verzeichnisse. In so einem Fall haben Sie zwei Möglichkeiten: Entweder Sie ändern den Besitzer des Verzeichnisses mit:

chown -R Webserver-User VERZEICHNIS

Damit wechselt das Verzeichnis sowie rekursiv (Option -R) alle Unterordner zum Besitzer "Webserver-User". Der heißt in vielen Linux-Distributionen "www" oder auch "www-data".

Die zweite Möglichkeit: Sie ändern die Gruppe für das Verzeichnis auf die Gruppe, in der der Apache-Webserver ist, und erteilen Schreibrechte für die Gruppe auf das Verzeichnis und seine Unterordner:

chgrp -R Webserver-Gruppe VERZEICHNISchmod -R g+w VERZEICHNIS

Allerdings ist hier Vorsicht geboten. Denn Verzeichnisse, in die der Webserver schreiben darf, sind typische Angriffsziele: Wenn es jemand schafft, ein PHP-Skript ins sogenannte Document-Root-Verzeichnis zu laden, kann es von extern einfach über den Browser gestartet werden, und Ihr Webserver führt den Code des Angreifers aus.

Das Document-Root-Verzeichnis ist der Haupt-Dokumentenbaum, der im Web sichtbar ist und aus dem heraus Dateien ausliefert werden. In der Apache-Konfiguration wird er mit "DocumentRoot VERZEICHNIS" angegeben. Voreingestellt in Apache ist das Verzeichnis /usr/local/apache/htdocs, in Debian ist es das Verzeichnis /var/www. "DocumentRoot" wird als Konfigurationsdirektive in der gesamten Serverkonfiguration ebenso benutzt wie für virtuelle Hosts. Greift nicht eine Alias-Direktive, hängt der Server die Pfade aus der angeforderten URL direkt an das Wurzelverzeichnis an und bildet so den Pfad zum Dokument. Ein Host-Zugriff auf www.mein_host.de/bilder/index.hmtl würde auf dem Server in einer Standard-Apache-Installation die Datei /usr/local/apache/htdocs/bilder/index.hmtl im Browser anzeigen.

Arbeitet auch ohne weitreichende Rechte: Ein CMS verlangt üblicherweise Zugriff auf verschiedene Verzeichnisse und bildet so ein Sicherheitsrisiko. Dabei kann beispielsweise die Joomla-Konfiguration auch per SSH auf den Server geladen werden.
Arbeitet auch ohne weitreichende Rechte: Ein CMS verlangt üblicherweise Zugriff auf verschiedene Verzeichnisse und bildet so ein Sicherheitsrisiko. Dabei kann beispielsweise die Joomla-Konfiguration auch per SSH auf den Server geladen werden.

Für viele Webanwendungen ist es nicht nötig, dass der Webserver Schreibrechte auf das Verzeichnis hat. Anstatt beispielsweise Plugins über den Browser zu installieren, kann man diese auch per SSH hochladen und dann selbst auf dem Server entpacken. Die Apache-Dokumentation führt als Beispiel das Joomla-CMS an. Das will seine Konfigurationsdatei ins Document-Root-Verzeichnis schreiben; wird ihm das aufgrund fehlender Rechte verweigert, zeigt es die Konfiguration im Browser an, und der Nutzer kann sie speichern und händisch hochladen.