Apache HTTP Server/Konfiguration

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Konfiguration

Beinahe alle Einstellungen des Apache HTTP Server werden standardmässig durch die Konfigurationsdatei "httpd.conf" gesteuert: Servername, Orte von Webverzeichnissen und Protokolldateien, die Zugriffsrechte, die Integration von PHP usw. Bei den meisten Linux-Distributionen gibt es nicht bloss eine Konfigurationsdatei "httpd.conf", sonderen gleich ein ganzes Rudel von Dateien. Das macht zwar jede einzelne Datei übersichtlicher und ermöglicht eine modulare Konfiguration, erschwert aber gleichzeitig den Überblick. In früheren Versionen des Apache HTTP Server befand sich die Konfiguration übrigens in den Dateien "access.conf" und "srm.conf".

Je nach Linux-Distribution und Version von Apache können sich die Konfigurationsdateien, die Webdateien und die Startskripte leider aber auch an ganz anderen Stellen finden. Einige Möglichkeiten sind die folgenden.

Linux-Distribution Pfad zur Datei "httpd.conf" Standardverzeichnis für Webdateien Webserver-Daemon
Fedora, Red Hat /etc/httpd/conf/* /var/www/html
Debian, Ubuntu /etc/apache2/* /var/www /usr/sbin/apache2
SUSE Linux 9.0 /etc/httpd/* /srv/www /usr/sbin/httpd
Novell, Opensuse /etc/apache2/* /var/www/htdocs
Linux XAMPP /opt/lampp/etc/httpd.conf /opt/lampp/htdocs
andere /etc/httpd /usr/local/apache
/usr/local/httpd

Bei einigen Linux-Distributionen werden Teile der Konfiguration in eigene Dateien ausgelagert und mit Hilfe von "Include"-Befehlen wieder eingebunden. Bei Novell- bzw. Opensuse-Distributionen kommt dazu, dass viele Apache-Konfigurationsdateien bei jedem Start neu erstellt werden. Eigene Änderungen sollten dort in der Datei "/etc/apache2/httpd.conf.local" durchgeführt werden. Damit diese Datei berücksichtigt wird, muss dieser Dateiname in die Variable "APACHE_CONF_INCLUDE_FILES" in der Datei "/etc/sysconfig/apache2" eingefügt werden.

Die Protokolldateien werden unter "/var/log/apache2/access_log" und "/var/log/apache2/error_log" gespeichert. Die Ausgabe dieser Protokolldateien kann mittels verschiedener Direktiven angepasst werden.

Um den Ort der Konfigurationsdateien herauszufinden, kann folgender Befehl verwendet werden, der neben der Versionsnummer und der verwendeten Linux-Distribution auch eine Menge darüber verrät, mit welchen Optionen der Webserver kompiliert wurde und in welchen Verzeichnissen der Webserver welche Daten vermutet.

$ httpd -V
bzw.
$ apache2 -V
Server version: Apache/2.2.8 (Ubuntu)
...
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"

Änderungen an der Konfiguration werden in jedem Fall erst wirksam, wenn der Apache HTTP Server neu gestartet wird.

Zu beachten ist, dass der Apache HTTP Server unter einem eigenen Benutzer läuft (oft "nobody", bei SUSE Linux "wwwrun"). Bei allen Webdateien müssen die Zugriffsrechte so eingestellt werden, dass dieser Benutzer und damit auch Apache sie lesen kann.

Grundeinstellungen

Zu den wichtigsten Einstellungen gehören die folgenden. Wie oben beschrieben können diese Einstellungen sich in unterschiedlichen Dateien befinden.

Parameter Beschreibung
AddDefaultCharset Der Zeichensatz der Webdateien.
BindAddress Legt fest, welche IP-Adresse der Webserver verwenden soll. Als Parameterwert möglich ist eine IP-Adresse oder auch ein Stern ("*") - in letzterem Falle antwortet der Webserver auf jede den Rechner erreichende Anfrage. Bei Verwendung von "BindAddress" darf "Listen" nicht aktiviert sein.
<Directory "xxx"> Dieser aus mehreren Zeilen bestehende Block beschreibt alle Eigenschaften eines Webverzeichnisses. "<Directory />" enthält die Standardeinstellungen, die unter anderem auch für "DocumentRoot" gelten. Der "<Directory>"-Block endet mit "</Directory>" und kann beispielsweise wie folgt aussehen.
<Directory "verzeichnis">
  ...
  AllowOverride AuthConfig FileInfo
  Options Indexes
</Directory>

Innerhalb des Blocks steuert der Parameter "Options", was in diesem Verzeichnis erlaubt bzw. verboten ist und wer darauf Zugriff hat.

Option Beschreibung
AllowOverride Oft ist es erwünscht, dass der Apache HTTP Server in Webverzeichnissen die Datei ".htaccess" auswertet und die darin enthaltenen Einstellungen auf das Verzeichnis anwendet. Dazu muss mit "AllowOverride" angegeben werden, welche Veränderungen zulässig sind. Mögliche Einstellungen sind die folgenden:
  • "None" verbietet alle Änderungen und ist oft die Standardeinstellung. Dateien namens ".htaccess" dürfen damit innerhalb der Webdatenverzeichnisse also keine Zugangseinstellungen aus der Konfigurationsdatei "httpd.conf" überschreiben.
  • "All" erlaubt alle Änderungen.
  • Eine Kombination aus den Parametern "AuthConfig" (Authentifizierung), "FileInfo" (Sprach- und Zeichensatzeinstellungen, Fehlerdatei), "Indexes", "Limit" (Zugriffsrechte) und "Options".
Options FollowSymLinks Symbolische Links dürfen auch vom Webserver genutzt werden.
Options Indexes Wird im Webbrowser der URL "http://rechnername/verzeichnis/" angegeben wird, so liefert der Apache HTTP Server je nach Konfiguration von "DirectoryIndex" automatisch die Seite "index.html", "index.php" usw. Sollte keine der "DirectoryIndex"-Dateien vorhanden sein, so bewirkt "Options Indexes", dass ein Inhaltsverzeichnis angezeigt wird. Das ist während der Programmentwicklung oft nützlich, kann im Echtbetrieb aber ein Sicherheitsrisiko darstellen.
DirectoryIndexes Angabe einer oder mehrerer Dateien, nach denen der Apache HTTP Server sucht, wenn im Webbrowser nur ein Verzeichnis angegeben wird. Eine übliche Einstellung lautet "index.html index.php main.php default.php". Wird im Webbrowser nun der URL "http://rechnername/verzeichnis/" eingegeben, so sucht Apache für dieses Verzeichnis nach den angegebenen Dateien und liefert die erste passende Datei.
DocumentRoot Das Verzeichnis, in dem sich die Webdateien (*.html, *.php usw.) befinden (z. B. "/var/www"). Hier liegen die Dateien und Verzeichnisse, die bei Aufruf von "http://rechnername/" vom Webserver angezeigt werden - die lokale Datei "/var/www/test.html" liesse sich also bei vorhandenen Leserechten über den URL "http://localhost/test.html" aufrufen.
KeepAlive Falls der Wert auf "On" steht, so bearbeitet der Webserver mehrere Anfragen eines Webbrowsers in einer Sitzung (engl. session). Das funktioniert allerdings nur, wenn der beteiligte Webbrowser mitspielt.

Mit der folgenden Konfiguration bearbeitet der Webserver höchstens 100 Anfragen eines Webbrowsers in einer Sitzung (engl. session). Dabei wartet er nach einer Anfrage höchstens 15 Sekunden auf Folgeanfragen.

KeepAlive            On
MaxKeepAliveRequests 100
KeepAliveTimeout     15
Listen Legt fest, welche IP-Adresse der Webserver verwenden soll. Als Parameterwert wird jeweils ein Socket (z. B. "192.168.1.1:80") eingetragen, wobei auch mehrere "Listen"-Anweisungen untereinander möglich sind. Bei Verwendung von "Listen" darf "BindAddress" nicht aktiviert sein.
LoadModule Wenn der Apache HTTP Server so kompiliert wurde, dass er zur Laufzeit Module laden kann (das ist meist der Fall), so sind dafür "LoadModule"-Anweisungen erforderlich, die beispielsweise wie folgt aussehen.
LoadModule php5_module /usr/lib64/apache2/mod_php5.so
Port Angabe des Ports, auf dem der Webserver lauschen wird - üblicherweise ist das Port 80. Soll der Webserver auf einem anderen Port erreichbar sein, so ist auch eine allfällige Firewall entsprechend zu konfigurieren.
ServerAdmin Die E-Mail-Adresse, welche der Nutzer bei Fehlermeldungen als Ansprechpartner erhält.
ServerName Netzwerkname des Rechners, auf dem der Apache HTTP Server läuft. Unter diesem Namen ist er von anderen Rechnern aus im Rechnernetz erreichbar, hier muss also ein Rechnername mitsamt Domainnamen stehen. Fehlt die Einstellung, so versucht Apache, den Netzwerknamen selbst herauszufinden.
ServerRoot Das Oberverzeichnis für die Webserverdateien.
StartServers Anzahl der beim Webserverstart gestarteten Webserver.

Mit der folgenden Konfiguration wird nur ein Webserver gestartet und auch nur ein zusätzlicher (engl. spare) Webserver-Prozess vorgehalten, falls weitere Anfragen kommen. Die Obergrenze für gleichzeitige Anfragen liegt bei 150. Der Eintrag "MaxRequestsPerChild 0" bewirkt, dass ein Webserver-Prozess dauernd läuft und nicht nach einer bestimmten Anzahl Anfragen durch einen neuen Prozess ersetzt wird; hier sollte nur etwas geändert werden, falls festgestellt wird, dass ein Webserver-Prozess mehr und mehr Speicher frisst.

MinSpare Servers    1
MaxSpareServers     1
StartServers        1
MaxClients          150
MaxRequestsPerChild 0
User Benutzer, unter dem der Webserver läuft (z. B. "wwwrun"). Der Webserver sollte unbedingt unter einem besonderen Benutzer laufen, damit ein allfällig erfolgreicher Angreifer nicht gleich die Rechte des Benutzers "root" erhält. Beim Parameter "nogroup" kann zusätzlich auch eine bestimmte Benutzergruppe festgelegt werden (z. B. "nogroup").
UserDir Ort des Heimatverzeichnisses des Benutzers. Wird als Parameterwert "public_html" eingetragen, so wäre beispielsweise das lokale Verzeichnis "/home/peter/public_html" über den URL "http://rechnername/~peter/" erreichbar. Das Verzeichnis sollte mit "chmod 755" für den Zugriff des Webservers vorbereitet werden, alle dort liegenden Dateien erreicht der Webserver nach "chmod 644 dateiname" ebenfalls.

Passwortschutz für Webverzeichnisse

Sobald der Apache HTTP Server läuft, hat jeder im Rechnernetz bzw. Internet Zugang zu allen von Apache verarbeitbaren Webseiten. Der Zugriff kann auf drei Arten eingeschränkt werden.

  • Absicherung in der Datei "httpd.conf": In der Datei "httpd.conf" kann genau eingestellt werden, von welchen Adressen die Webseiten eines bestimmten Verzeichnisses gelesen werden dürfen.
  • Absicherung durch eine Firewall: Wird auf dem Rechner eine Firewall betrieben, so kann diese derart konfiguriert werden, dass Apache nicht von aussen (also über das Rechnernetz) kontaktiert werden kann. Die Webseiten können dann nur vom lokalen Rechner aus betrachtet werden.
  • Passwortabsicherung einzelner Verzeichnisse: Im zu schützenden Verzeichnis wird eine Datei mit dem Namen ".htaccess" angelegt und dort angegeben, dass dieses Verzeichnis erst nach einer vorherigen Authentifizierung durch Name und Passwort gelesen werden kann. Apache wertet diese Datei aus und zeigt allen Surfern, die Dateien aus diesem Verzeichnis mit ihrem Webbrowser ansehen möchten, ein Anmeldefenster.

Absicherung des Apache HTTP Servers

Einrichtung von Zugriffskontrollen und Authentifizierung auf dem Apache HTTP Server.

Der Apache HTTP Server ist der beliebteste Webserver, der viele integrierte Sicherheitsmechanismen bietet, u. a.

  • Rechnerbasierte Rechnernetzzugriffskontrolle (über die Direktiven "order", "allow" und "deny")
  • Kontrolle darüber, ob und wo lokale Benutzer CGI-Skripte laufen lassen können.
  • Kontrolle darüber, ob und wie lokale Benutzer die Einstellungen ausser Kraft setzen können.

Einige wichtige Optionen (Direktive "Options") sind die folgenden.

ExecCGI Legt fest, dass CGI-Skripte unter dieser Verzeichnishierarchie ausgeführt werden können. Das Common Gateway Interface / CGI ist plattform- und sprachenneutral, CGI-Programme können deshalb in jeder Sprache geschrieben werden, z. B. BASIC, C/C++, Perl, Python, TCL, Shell-Sprachen (sh, bash usw.).
FollowSymLinks Ermöglicht entfernten Benutzern, symbolischen Verknüpfungne zu folgen, indem sie einfach auf ihre Hyperlinks klicken.
Includes Bestimmt, dass der Apache HTTP Server sogenannte Server Side Includes / SSI verarbeitet, ein System, mit dem Webmaster aktuelle Informationen in HTML-Dokumente einfügen können, ohne CGI-Programme schreiben zu müssen. Um Standard-SSI ohne die exec-Direktive zu aktivieren, wird die Optionenzeile wie folgt geändert.
Options IncludesNOEXEC
Indexes Ermöglicht eine Inhaltsauflistung des Verzeichnisses, wenn der Apache HTTP Server keine Standardseite findet.