Passwortschutz für WWW-Verzeichnisse

Angenommen, Du willst auf deinem frei zugänglichen WWW-Server ein Verzeichnis anlegen, in dem die HTML-Dokumete, Bilder und Unterverzeichnisse nicht für jeden vorbeisurfenden Menschen direkt lesbar sein sollen. Auf dieser Seite ist beschrieben, wie Du auf WWW-Seiten, die mit einem der folgenden WWW-Server laufen, einen Passwortschutz einrichten kannst. Dieser Schutz sollte funktionieren mit: Apache, Netscape Server, IIS.

Vorher noch eine kleine Warnung: Benutzername und Passwort, die über den WWW-Browser Dialog nachher eingegeben werden, werden im Klartext vom WWW-Browser zum WWW-Server übertragen. Und (theoretisch!) könnten alle Rechner, die die Pakete zwischen Client und Server durch das Internet transportieren die Passwörter im Klartext mitlesen. Dies kann man erst durch eine SSL Verbindung (Secure Socket Layer) verhindern - aber das ist ein anderes Thema...

Schritt 1)
Lege ein neues Verzeichnis unterhalb eines existierenden WWW-Verzeichnisses an. Im Beispiel gehe ich davon aus, dass dieses neue Verzeichnis 'protectedstuff/' heißt.

Schritt 2)
Besorge Dir das Tool 'htpasswd' für dein Betriebssystem. Unter Linux sollte es üblicherweise schon installiert sein (/usr/bin/htpasswd). Oder lade hier 'htpasswd.exe' für Windows. Im Folgenden die Kurzhilfe zu htpasswd:
     Usage:  htpasswd [-cmdps] passwordfile username
             htpasswd -b[cmdps] passwordfile username password
      -c  Create a new file.
      -m  Force MD5 encryption of the password (default).
      -d  Force CRYPT encryption of the password.
      -p  Do not encrypt the password (plaintext).
      -s  Force SHA encryption of the password.
      -b  Use the password from the command line rather than prompting for it.
     On Windows and TPF systems the '-m' flag is used by default.
     On all other systems, the '-p' flag will probably not work.

Schritt 3)
Erzeuge ein neues Passwortfile mit dem Tool htpasswd. Dabei wird auch gleich der erste Benutzer angelegt. In diesem Beispiel soll der erste Benutzer 'mustermann' und sein Passwort 'geheim' sein. Also gib ein:
     htpasswd -c test.pwd mustermann
Der Parameter '-c' ist dabei wichtig – damit legt das Programm eine neue Passwortdatei an. Im Beispiel heißt die Datei 'test.pwd' – und kann natürlich auch anders heißen (üblich ist z.B. '.htpasswd'). Das Programm fordert dann zweimal (damit man sich nicht vertippt hat) zur Eingabe des Passwortes für den ersten Benutzer auf. Wir geben zweimal 'geheim' (ENTER) ein. Dann ist die neue Passwortdatei unter dem Namen 'test.pwd' angelegt und enthält in etwa folgende Zeile:
     mustermann:$apr1$VF......$1QmNuCSOVKKa/vT9lxWZV.
Das Passwort ist hier nicht lesbar, denn es ist durch den MD5-Algorithmus (eine mathematische Falltür: man kommt nur in einer Richtung durch!) verschlüsselt.

Schritt 4)
Nun kann man optional noch weitere Benutzer in die Passwortdatei aufnehmen. Zum Beispiel den Benutzer 'gast' mit dem Passwort 'auchgeheim'. Achtung: Jetzt lässt man den Parameter '-c' weg, denn man möchte an eine vorhandene Passwortdatei neue Einträge anfügen.
     htpasswd test.pwd gast
Wieder zweimal das Passwort 'auchgeheim' eingeben. Die Passwortdatei sieht nun so aus:
     mustermann:$apr1$VF......$1QmNuCSOVKKa/vT9lxWZV.
     gast:$apr1$5c......$4aG3vH0BGktalsg18gsgW0

Schritt 5)
Diese Passwortdatei speichert man nun in einem beliebigen Verzeichnis. Das Verzeichnis und die Passwortdatei muss (speziell unter Unix) für den Benutzer, mit dessen Rechten der WWW-Server läuft lesbar sein. Unter Unix kann man die Datei z.B. hierhin verschieben: /usr/local/httpd/test.pwd – unter Windows z.B. hierhin: c:\programme\apache\test.pwd denn die Passwortdatei sollte nicht unterhalb des DOCUMENTROOT des WWW-Servers liegen, denn dann kann theoretisch jemand anonym aus dem WWW die Passwortdatei herunterladen.

Schritt 6)
Nun legt man unterhalb des DOCUMENTROOT des WWW-Servers, direkt in dem zu schützenden Verzeichnis aus Schritt 1) - z.B. 'protectedstuff/' mit einem Texteditor eine Datei '.htaccess' an (der Punkt am Anfang ist wichtig! In diese Datei schreibt man in etwa Folgendes hinein (Alle Zeilen natürlich ohne die führenden Leerzeichen!):

AuthUserFile /directory/pfad/test.pwd
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic
<Limit GET>
require user mustermann
require user gast
</Limit>


Dabei muss natürlich in der Zeile 'AuthUserFile' der absolute Pfad zur in Schritt 5 erzeugten Passwortdatei stehen! Dabei unter Windows alle Backslashes (\) durch normale Slashes (/) ersetzen. Und wenn im Pfadnamen ein Leerzeichen steht, dann den gesamten Pfad in Anführungszeichen packen! z.B. so:
  AuthUserFile "C:/Programme/Apache Group/Apache/htpasswd.txt"
Innerhalb des <Limit GET> Blocks stehen alle User, auf die ein 'GET' beschränkt ist.

Schritt 7)
Achtung: Wenn Du beim Apache WWW Server in der Konfigurationsdatei (ältere Apache: 'access.conf', neuere Apache 'httpd.conf') stehen hast: 'AllowOverride None', dann kann bei darunterliegenden Verzeichnissen das <Limit GET> aus .htaccess nicht ausgeführt werden. Schlimmer noch: bei 'None' schaut Apache nicht mal nach, ob es eine '.htaccess' Datei in den Unterverzeichnissen gibt... Also in der Configdatei (ältere Apache: 'access.conf', neuere Apache 'httpd.conf') evtl. noch 'AllowOverride All' einstellen. (Neustart von Apache nicht vergessen, wenn die Konfiguration geändert wurde!)

Schritt 8)
Fertig! Nun sollte man den Zugriff per WWW auf dieses Verzeichnis testen. Der WWW-Browser sollte nun bei Zugriff auf das 'protectedstuff/' Verzeichnis (und alle URL-Adressen die hierarchisch darunter liegen) eine Dialogbox öffnen, die zur Eingabe von Benutzername und Passwort auffordern.

Ein Tipp zum Schluss)
Die Trennung zwischen Passwortdatei und .htaccess-Datei macht insofern Sinn, dass viele .htaccess Dateien alle auf die gleiche Passwortdatei zeigen können. Und wenn ein Benutzer sein Passwort ändern will (oder muss), er dies nur einmal tun muss.

© 2001-03-07 by WOK