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