====== Konfiguration eines Webservers ======
===== Apache-Konfigurationsdatei =====
Beinahe alle Einstellungen von Apache werden durch die Datei httpd.conf gesteuert: der Servername, die Orte von Webverzeichnissen und Logdateien, die Zugriffsrechte, die Integration von PHP etc. Die folgende Tabelle gibt an, wo sich diese Datei üblicherweise befindet.
^Installation^Ort von httpd.conf^
|Windows-XAMPP|''C:\xampp\conf\httpd.conf''|
|Linux XAMPP|''/opt/lampp/etc/httpd.conf''|
|Debian, Novell, openSUSE, Ubuntu|''/etc/apache2/*''|
Bei den meisten Linux-Distributionen gibt es nicht eine Konfigurationsdatei ''httpd.conf'', sondern gleich ein ganzes Bündel. Das macht jede einzelne Datei übersichtlicher und ermöglicht eine modulare Konfiguration, gleichzeitig erschwert es aber den Überblick.
Bei openSUSE- bzw. Novell-Distributionen kommt hinzu, dass viele Apache-Konfigurationsdateien bei jedem Start neu erstellt werden. Eigene Änderungen sollten in /etc/apache2/httpd.conf.local durchgeführt werden. Damit diese Datei berücksichtigt wird, müssen Sie diesen Dateinamen in die Variable ''APACHE_CONF_-INCLUDE_FILES'' in der Datei ''/etc/sysconfig/apache2'' einfügen.
Achtung: Änderungen an der Konfiguration werden erst wirksam, wenn Sie Apache neu starten!
Unter Windows muss in allen Apache-Konfigurationsdateien das Zeichen / zur Trennung von Verzeichnissen verwenden, nicht wie sonst üblich \!
===== Wichtige Einstellungen =====
**ServerName:** Diese Einstellung gibt den Netzwerknamen des Rechners an, auf dem Apache läuft. Unter diesem Namen ist der Webserver von anderen Rechnern im Netzwerk aus erreichbar. (Wenn die Einstellung fehlt, versucht Apache, den Netzwerknamen selbst herauszufinden.)
DocumentRoot: Diese Einstellung gibt das Verzeichnis an, in dem sich die Webdateien (*.html, *.php etc.) befinden. Die folgende Tabelle fasst den Defaultzustand je nach Installation zusammen:
|**Installation**|**DocumentRoot-Ort**|
|Windows XAMPP|C:\xampp\htdocs|
|Linux XAMPP|/opt/lampp/htdocs|
|Novell,openSUSE|/srv/www/htdocs|
**LoadModule:** Wenn Apache so kompiliert wurde, dass es zur Laufzeit Module laden kann (das ist meistens der Fall), sind hierfür LoadModule-Anweisungen erforderlich, die beispielsweise so aussehen:
# für Windows
"c:/xampp/php/php5apache2_2.dll"
# für Linux LoadModule php5_module
LoadModule php5_module /usr/1ib64/apache2/mod_php5.so
**AddType:** AddType-Anweisungen stellen die Zuordnung zwischen Dateiken-nungen und dem Applikationstyp her. Dank der folgenden Einstellung weiß Apache, dass *.php vom PHP-Interpreter ausgeführt werden soll:
AddType application/x-httpd-php .php
**PHPIniDir:** Diese Einstellung wird an den PHP-Interpreter übergeben und sagt diesem, von welchem Ort er die php.ini-Datei lesen soll. Die Option soll die Konfiguration von PHP erleichtern, die in der Vergangenheit oft an einem ganz trivialen Punkt scheiterte: PHP fand die php.ini-Datei nicht bzw. wertete eine veraltete oder falsche Version dieser Datei aus. PHPIniDir steht ab Apache 2 zur Verfügung und wird nur von der Windows-Version von Apache ausgewertet.
PHPIniDir "C:/xampp"
**AddDefaultCharset:** Diese Einstellung gibt an, welchen Zeichensatz die Webdateien haben.
**:** Dieser aus mehreren Zeilen bestehende Block beschreibt alle Eigenschaften eines Webverzeichnisses. enthält die Default-Einstellungen, die unter anderem auch für DocumentRoot gelten. Der -Block endet mit . Die folgenden Zeilen geben ein Beispiel:
oder
...
AllowOverride AuthConfig Fileinfo
Options Indexes
Innerhalb des -Blocks steuern diverse Optionen, was in diesem Verzeichnis erlaubt bzw. verboten ist und wer darauf Zugriff hat. An dieser Stelle werden nur zwei dieser Optionen vorgestellt:
* **AllowOverride:** Oft ist es erwünscht, dass Apache in Webverzeichnissen die Datei .htaccess auswertet und die darin enthaltenen Zusatzeinstellungen auf das Verzeichnis anwendet (siehe auch den nächsten Abschnitt). Damit das funktioniert, müssen Sie mit AllowOverride angeben, welche Veränderungen zulässig sind. Mögliche Einstellungen sind None (verbietet alle Änderungen, gilt oft per Default), All (erlaubt alle Änderungen) oder eine Kombination aus Auth-Config (Authentifizierung), Fileinfo (Sprach- und Zeichensatzeinstellungen, Fehlerdatei), Indexes, Limit (Zugriffsrechte) und Options.
* **Options Indexes:** Wenn im Browser die Adresse http://rechnername/verzeichnis/ angegeben wird, liefert Apache je nach Konfiguration von Directoryindex automatisch die Seite index.html, index.php etc. (siehe unten). Sollte keine der Directoryindex-Dateien existieren, bewirkt Options Indexes, dass Apache ein Inhaltsverzeichnis anzeigt. Das ist während der Programmentwicklung oft praktisch, kann aber im Vollbetrieb ein Sicherheitsrisiko darstellen. (Neben Indexes gibt es übrigens noch eine Reihe weiterer Schlüsselwörter, die Options nachgestellt werden dürfen.)
* **Directoryindex:** Mit dieser Option kann eine oder mehrere Dateien angeben werden, nach denen Apache sucht, wenn im Webbrowser nur ein Verzeichnis angegeben wird. Eine übliche Einstellung lautet index.html index.php main.php default.php. Wenn im Browser nun die Adresse http://rechnername/verzeichnis/ eingegeben wird, sucht Apache für dieses Verzeichnis nach den angegebenen Dateien und liefert die erste passende Datei.
===== Passwortschutz für Webverzeichnisse (.htaccess-Datei) =====
Sobald Apache läuft, hat jeder im Netz bzw. im Internet Zugang zu allen Webseiten, die Apache verarbeiten kann. Gerade auf Entwicklungsrechnern ist das nicht immer gewollt. Es bestehen drei Möglichkeiten, den Zugriff auf Webseiten einzuschränken:
Absicherung in httpd.conf: In httpd.conf können Sie ganz genau einstellen, von welchen Adressen die Webseiten eines bestimmten Verzeichnisses gelesen werden dürfen. Es fehlt hier allerdings der Platz, um diese Mechanismen zu beschreiben.
Absicherung durch eine Firewall: Wenn auf dem Entwicklungsrechner eine Firewall läuft, kann diese so konfiguriert werden, dass Apache nicht von außen (also über das Netzwerk) kontaktiert wird. Die Webseiten können also nur vom lokalen Rechner betrachtet werden.
Passwortabsicherung einzelner Verzeichnisse: Hierfür legt man im zu schützenden Webverzeichnis eine Datei mit dem Namen .htaccess an und gibt dort an, dass dieses Verzeichnis erst nach einer vorherigen Authentifizierung durch Name und Passwort gelesen werden darf. Apache wertet .htaccess aus und zeigt allen Surfern, die Dateien aus diesem Verzeichnis mit ihrem Browser ansehen möchten, einen Login-Dialog.
Im Folgenden wird nur die letzte Variante behandelt. Sie ist auch dann hilfreich, wenn man ein im Internet öffentlich zugängliches Verzeichnis gegen fremde Benutzung absichern möchte. Ein typisches Beispiel hierfür ist das PHP-Programm phpMyAdmin, das auf unzähligen Websites zur Administration von MySQL verwendet wird
==== Passwortdatei anlegen ====
Der erste Schritt zum Passwortschutz besteht darin, eine Passwortdatei anzulegen. Die Passwortdaten werden aus Sicherheitsgründen nicht in .htaccess gespeichert, sondern in einer separaten Datei. Diese Datei darf sich auch außerhalb der öffentlich zugänglichen Webverzeichnisse befinden. Die Passwortdatei wird im folgenden Beispiel site.pwd genannt.
Die Passwortdatei wird mit dem Apache-Hilfsprogramm htpasswd erzeugt. Dabei geben Sie die Option -c (create), den Namen der Passwortdatei und einen Benutzernamen an. Das Programm fragt Sie anschließend nach dem gewünschten Passwort und erzeugt dann die Passwortdatei, wobei der Benutzername im Klartext, das Passwort aber verschlüsselt gespeichert wird:
>htpasswd -c site.pwd michael
New password: **********
Re-type new password: **********
Adding password for user michael
Um einer schon existierenden Passwortdatei eine weitere Kombination aus Benutzername und Passwort hinzuzufügen, führen Sie htpasswd nochmals ohne die Option -c aus:
>htpasswd site.pwd name2
New password: **********
Re-type new password: **********
Adding password for user name2
Die resultierende Passwortdatei sieht so ähnlich wie die folgenden Zeilen aus:
michael:$aprl$gpl.....$qljDszVJOSCS.oBoPJItSj
name2:$aprl$A22.....$0V01NclFcXgNsruT9c6Iql
**Hinweis** Um htpasswd.exe unter Windows auszuführen, muss man ein Kommandofenster (Eingabeaufforderung) öffnen und in Anführungszeichen den vollständigen Pfad des Programms angeben, also üblicherweise "C:\apache22\bin \htpasswd.exe".
Wenn Sie die Passwortdatei in einem Verzeichnis bei Ihrem Internet Service Provider erstellen oder ergänzen möchten, benötigen Sie einen ssh-Zugang zum Rechner des ISPs (um dort htpasswd auszuführen). Manche ISPs stellen stattdessen andere Konfigurationshilfen zur Verfügung.
==== .htaccess-Datei ====
Wenn sich in einem Webverzeichnis eine Datei mit dem Namen .htaccess befindet, wertet Apache die in dieser Datei enthaltenen Konfigurationseinstellungen aus. Dabei gilt dieselbe Syntax wie in httpd.conf. Allerdings können nur einige verzeichnisspezifische Einstellungen vorgenommen werden.
Mit der folgenden .htaccess-Datei wird der Inhalt eines Verzeichnisses (inklusive aller Unterverzeichnisse!) geschützt:
AuthType Basic
AuthUserFile "c:/xampp/htdocs/test/site.pwd"
AuthName "myrealm"
Require valid-user
AuthUserFile gibt den vollständigen Dateinamen der Passwortdatei an. AuthName bezeichnet den Bereich (realm), für den der Zugriff gültig ist. Der Sinn besteht darin, dass Sie nicht jedes Mal einen Login durchführen müssen, wenn Sie auf durch .htaccess geschützte Verzeichnisse zugreifen wollen. Sobald Sie sich mit einer bestimmten AuthName-Bezeichnung eingeloggt haben, gilt dieser Login auch für alle anderen Verzeichnisse mit dieser Awf/zName-Bezeichnung.
Für .htaccess bedeutet das, dass Sie für Verzeichnisse mit gemeinsamem Login jeweils dieselbe AuthName-Zeichenkette angeben. Umgekehrt können Sie für unterschiedliche Verzeichnisse auch unterschiedliche Bereichsnamen angeben - dann ist für jedes Verzeichnis ein neuer Login erforderlich.
Require valid-user bedeutet, dass als Login jede gültige Kombination aus Benutzername und Passwort zulässig ist. Alternativ können Sie hier auch angeben, dass ein Login nur für ganz bestimmte Benutzer erlaubt ist:
Require user myname name2 name3
Weitere Details zur Benutzerauthentifizierung und zur .htaccess-Konfiguration finden Sie z.B. hier:
http://www.apacheweek.com/features/userauth
**Achtung** .htaccess-Dateien werden nur wirksam, wenn dies in der Apache-Konfigurationsdatei httpd.conf erlaubt ist! Wenn die Apache-Konfiguration für das betroffene Verzeichnis bzw. für das Default-verzeichnis / den Eintrag AllowOverride None enthält, bleiben alle .htaccess-Dateien wirkungslos! Wenn in AllowOverride nur einzelne Optionen angegeben werden, in .htaccess aber darüber hinausgehende Einstellungen verändert werden, wird sogar ein Fehler ausgelöst.
Damit .htaccess-Dateien berücksichtigt werden, muss httpd.conf für das betreffende Verzeichnis (also in der entsprechenden -Gruppe) die Einstellung AllowOverride All oder AllowOverride Auth-Config enthalten.
Unter Windows ist es mit dem Windows-Explorer nicht möglich, eine Datei mit dem Namen .htaccess zu erzeugen: der Explorer glaubt, dass dieser Name ungültig ist. Nennen Sie die Datei vorerst htaccess.txt, und verwenden Sie dann ein Eingabeaufforderungsfenster, um die Datei durch das Kommando RENAME htaccess.txt .htaccess umzubenennen. Windows-Anwender werden sich vielleicht wundern, warum der Dateiname überhaupt mit einem Punkt beginnen muss. Das ist die unter Unix/Linux übliche Methode, Dateien als versteckt zu kennzeichnen. Derartige Dateien werden von Linux-Dateimanagern normalerweise nicht angezeigt.
==== Zugriff auf ein geschütztes Verzeichnis ====
Wenn Sie versuchen, mit einem Browser eine Datei aus einem geschützten Verzeichnis zu lesen, zeigt der Webbrowser einen Login-Dialog an.
----
Quelle: Michael Kofler, PHP&MySQL
Links:
* [[http://isneu.informatikserver.at/index.php?option=com_content&task=view&id=16579|XAMPP am USB-Stick]]