Webserver absichern: Verzeichniseinstellungen am Beispiel Apache
Veröffentlicht am 28.09.2021 von DomainFactory
Was Sie als Admin selbst tun können, um Ihren Webserver abzusichern, erfahren Sie hier. In diesem Beitrag geht es – am Beispiel von Apache – um sichere Einstellungen für Webserver-Verzeichnisse.Grundsätzlich ist bei Webserver-Einstellungen ein möglichst restriktives Vorgehen ratsam. Das heißt: Erlauben Sie jeder Benutzerrolle nur das, was für die Nutzung Ihrer Anwendungen jeweils erforderlich ist. Verlassen Sie sich nicht darauf, dass Sie jegliche Kompromittierung Ihres Webservers verhindern können: Hacker versuchen mit zum Teil sehr ausgefeilten Methoden, etwa per SQL-Injektion oder Cross-Site-Scripting, sich die Rechte angemeldeter User zu verschaffen, und je mehr sie damit tun können, desto höher ist die Gefahr für Ihre Installation.
Dies ist auch der Grund, warum bestimmte Webserver-Prozesse nicht mit Root-Rechten laufen dürfen. Zwar werden Webserver mit Root-Rechten gestartet, damit sie auf Ports unterhalb von 1024 zugreifen können (Standard: Port 80 unverschlüsselt bzw. 443 verschlüsselt). Für die Beantwortung von Anfragen ist aber ein eigener, nur für den Webserver reservierter Benutzer ohne Root-Rechte zuständig. Würde dann trotz allem einmal Ihr Webserver gehackt, ist dadurch zumindest nicht der Rest des Systems gefährdet.
Apache erstellt dafür bei der Installation einen Default-User, in den der Webserver nach dem Start wechselt (bei Debian-basierten Linux-Distributionen wie Ubuntu heißt er www-data, bei RHEL/CentOS/Fedora apache; jeweils mit gleichlautender User Group). Wenn Sie einen eigenen Nutzer dafür brauchen, legen Sie diesen per
sudo useradd [Benutzername]
an und konfigurieren ihn mit den Apache-Direktiven Group und User als Apache-Benutzer. Wie bei jeder Konfigurationsänderung ist dann ein Neustart des Webservers nötig:
apachectl -k restart (als root)
Relevante Verzeichnisse
Aus Sicherheitsgründen nutzen Webserver auch ein eigenes Verzeichnis für die auszuliefernden Webseiten-Dateien, genannt „Document Root“. In der Standardkonfiguration von Apache 2.x ist das „/usr/local/apache2/htdocs“. Aber auch hier kochen verschiedene Distributionen ihr eigenes Süppchen: Bei Debian und Ubuntu heißt Document Root „/var/www“, bei CentOS/RHEL/Fedora „/var/www/html“. Wollen Sie ein anderes Verzeichnis verwenden, legen Sie das in der zentralen Apache-Konfigurationsdatei (üblicherweise httpd.conf) über die Direktive DocumentRoot fest.
Auch wichtig: Im „Server Root“ genannten Verzeichnis, üblicherweise das Installationsverzeichnis, erwartet der Webserver standardmäßig Konfigurationsfiles, Logs, Module etc. Das Verzeichnis kann vor der Kompilierung festgelegt werden; Default ist bei Apache „/usr/local/apache2“, bei Debian-basierten Linux-Distros „/ect/apache2“ und bei CentOS/RHEL/Fedora „/etc/httpd“. Die entsprechende Direktive ServerRoot in der httpd.conf wird bei der Installation automatisch gesetzt, kann aber bei Bedarf angepasst werden. Pfadangaben in der httpd.conf ohne vorangestelltes „/“ bezieht Apache immer auf Server Root.
Lagern Sie Ihre httpd.conf nicht am vorgesehenen Speicherort, können Sie das Apache beim Start mit der Option „-f“ mitteilen, zum Beispiel:
apachectl -f /usr/local/apache2/myconf/httpd.conf
Einstellungen für Document Root
Document Root bezeichnet die Stelle im Verzeichnisbaum, von der aus der Webserver nach angeforderten Ressourcen sucht. Ist beispielsweise Document Root auf „/var/www“ gesetzt und ein Client fordert eine HTML-Datei unter der URL „example.com/forum/index.html“ an, sucht der Server im Dateisystem nach der Datei /var/www/forum/index.html. Er hängt also den Pfad aus der angeforderten URL (hinter dem Domainnamen) an Document Root an, um den Pfad zum Dokument zu ermitteln.
Die Ressourcen unter Document Root sollten nur Benutzer ändern können, die mit der Pflege Ihrer Website betraut sind. Der Webserver bzw. der für das Bedienen von Anfragen zuständige User (zum Beispiel www-data) muss Ressourcen zwar lesen und ausführen können, darf aber keine Schreibrechte haben. Sie können als Besitzer der Daten und Verzeichnisse in Document Root also den User root angeben oder, wenn mehrere Personen Schreibrechte brauchen, dafür eine neue Gruppe anlegen, beispielsweise „www“ mit einem ersten User. Auf Debian-basierten Systemen tun Sie das etwa mit:
sudo groupadd www
sudo adduser USERNAME www
sudo chgrp www /var/www/html
sudo chmod g+w /var/www/html.
Auch in der httpd.conf finden sich einige relevante Einstellungen für Document Root, definiert über die verzeichnisbezogene Direktive Directory. Im Einzelnen betrifft das die Direktiven AllowOverride, mit der Sie bestimmen, welche Konfigurationen per .htaccess-Datei überschrieben werden dürfen, sowie Require zur Zugriffsregelung und Options für Verzeichnisoptionen wie Verzeichnisbrowsing, symbolische Links oder Server Side Includes. In der Regel sind Verzeichnisbrowsing und symbolische Links für Document Root aktiv – hier sollten Sie ggf. nachbessern:
<Directory /var/www> # gilt für Document Root = /var/www
Options -Indexes # Verzeichnis-Listing deaktiviert
# Einschalten entsprechend mit +Indexes
</Directory>
Dateien außerhalb von Document Root
Dateien, die für Ihre Website benötigt werden, aber nicht für die Allgemeinheit zugänglich sein sollten, legen Sie besser in einem Ordner außerhalb von Document Root ab. Beachten Sie aber auch, dass es etwa per Alias-Direktive oder über symbolische Links möglich ist, auch Dateien bzw. Verzeichnisse außerhalb von Document Root aus dem Web erreichbar zu machen. Damit wächst die Gefahr unautorisierter Zugriffe und erfolgreicher Hacker-Angriffe.
Deshalb sollten Sie darauf achten, dass die Verzeichniseinstellungen für Ihr Dateisystem sehr restriktiv gesetzt sind (neuere Apache-Versionen tun das bereits weitgehend) und nur bei Bedarf für bestimmte Verzeichnisse gelockert werden:
<Directory /> # gilt für alle Verzeichnisse im Dateisystem
Require all denied # Zugriff auf Resourcen
# wird verweigert
Options None # Optionen nur bei Bedarf akivieren
AllowOverride None # .htaccess-Dateien werden ignoriert
</Directory>
Dann gelten diese restriktiven Einstellungen für alle Verzeichnisse inkl. Document Root, sodass Sie dort keine eigenen Einschränkungen mehr vornehmen müssen. Sie können aber beispielsweise die .htaccess-Steuerung für Document Root oder Inhalteauflistung für ein Downloadverzeichnis explizit erlauben:
<Directory /var/www> # gilt für Document Root = /var/www
Require all granted # Zugriff ohne Autorisierung erlaubt
AllowOverride All # .htaccess-Dateien voll nutzbar
</Directory>
bzw.
<Directory /var/www/downloads> # gilt für Download-Verzeichnis
Options +Indexes # Verzeichnis-Listing aktiviert
</Directory>
Das Prinzip ist klar: Verzeichnisspezifisch wird nur aktiviert, was benötigt wird. Dabei können Sie die Berechtigungen sehr detailliert regeln:
<Directory /example>
Options SymLinksIfOwnerMatch #Besitzer von Link und Ziel
# sind identisch
Require group admin # Zugriff nur für Mitglieder
# der admin-Gruppe
</Directory>
Server Root schützen
Mit diesen <Directory />-Anweisungen ist auch das Server-Root-Verzeichnis inkl. Unterverzeichnissen bereits gut geschützt. Achten Sie aber darauf, dass außer root niemand Dateien und Verzeichnisse in Server Root und seinen Unterverzeichnissen (bin, conf, logs) ändern darf (chmod 755, wenn root der Besitzer ist). Um sicherzustellen, dass die ausführbare Datei (httpd) nicht verändert werden kann, empfiehlt sich dafür chmod 511 (Besitzer darf lesen und ausführen, alle anderen nur ausführen):
chmod 511 /usr/local/apache2/bin/httpd
Außerdem empfehlen die Apache-Entwickler, die folgende Zeile in die Konfiguration aufzunehmen:
UserDir disabled root
UserDir macht Verzeichnisse registrierter Benutzer per URL verfügbar. Mit der genannten Einstellung verhindern Sie Sicherheitsprobleme durch Fehlkonfiguration.
Sie suchen einen Hosting-Performance-Server mit flexiblen Serverkonfigurationsmöglichkeiten und vollständigem Systemzugriff? Dann informieren Sie sich jetzt über unsere Dedicated Server-Angebote.