BananaJoe - .htpass

Passwortschutz


bananapache

BananaJoes .htaccess

Mit der .htaccess Datei haben wir auch die Möglichkeit, einzelne Verzeichnisse auf unserem Webserver mit einem Passwort vor unberechtigtem Zugriff zu schützen.

Die Authentifizierung mittels Passwort erfolgt dabei folgendermaßen:
Der Client (unser Browser) sendet den Namen und das Passwort an den Apache Webserver. Dieser sieht in einer speziellen Datei nach, ob der Client zugriffsberechtigt ist oder nicht.
Es ist möglich eine ganze Reihe von Personen in Gruppen zusammenzufassen und diesen Gruppen als Ganzes den Zugang zu erlauben oder zu verbieten.

Die Authentifizierungsdatei wird mit einem kleinen Programm erstellt, welches sowohl bei der UNIX/Linux als auch der Windows Version des Apache mitgeliefert wird.

Dieses Programm heißt "htpasswd" und findet sich im "bin" Verzeichnis von Apache. Es arbeitet kommandozeilenorientiert.


htpasswd

Das Utilitie htpasswd:

Um die Authentifizierungsdirektiven in der ".htaccess" Datei nutzen zu können, müssen wir ersteinmal eine Datei anlegen, in der die Namen und Passwörter der Benutzer eingetragen werden.

Dafür benutzen wir das mit Apache mitgelieferte Utilitie "htpasswd", welches im "bin" Verzeichnis des Apache zu finden ist.
Im weiteren Verlauf wird hier die Windows Version behandelt, jedoch sind alle Angaben auch für die UNIX/Linux Version nutzbar.

"htpasswd" arbeitet Kommandozeilen orientiert, d.h. es gibt keine grafische Oberfläche.
Wir erledigen alles in der Eingabeaufforderung von Windows.

Parameter

Die für uns wichtigen Parameter beim Ausführen von "htpasswd":

htpasswd [-cmdps] passwordfile username
htpasswd -b[-cmdps] passwordfile username password

Kommandoparameter:

-c Neue Datei erstellen
-n Datei nicht updaten (Unter UNIX Ergebnisse an stdout senden)
-m MD5 Verschlüsselung verwenden (Unter Windows standard)
-d CRYPT Verschlüsselung verwenden
-p Passwort nicht verschlüsseln
-s SHA Verschlüsselung verwenden
-b Passwort von der Kommandozeile übernehmen


htpasswd anwenden

Anlegen einer Authentifizierungsdatei:

Unsere Authentifizierungsdatei mit den Benutzernamen und Passwörtern legen wir wie folgt an:
Mit der Befehlszeile htpasswd -c c:\apache\htdocs\password bananajoe
wird im htdocs Verzeichnis des Apache eine neue Datei namens password erzeugt und gleichzeitig ein neuer Benutzer mit dem Namen "bananajoe" angelegt.
Das Programm fragt nun nach einem Passwort, welches zweimal eingegeben werden muß. Unser Passwort lautet hier "geheim".

htpasswd

Als nächstes wollen wir noch einen weiteren Benutzer anlegen.
Da wir unsere Authentifizierungsdatei mit dem letzten Schritt schon angelegt haben und nur einen Benutzer hinzufügen wollen, können wir den -c Parameter weglassen.
htpasswd c:\apache\htdocs\password monkey
Hier folgt ebenfalls die Frage nach dem Passwort, in diesem Beispiel "tree".

htpasswd2

Die Übergabe der Verschlüsselungsmethode können wir uns hier sparen, da unter Windows standardmäßig die MD5 Verschlüsselung eingesetzt wird.

Und so sieht der Inhalt unserer Authentifizierungsdatei aus:

bananajoe:$apr1$2S5.....$hYT0J056CzHWePY62EXQS0
monkey:$apr1$pX5.....$dgpYt7Pd9U0ESTCv5tP7w1

Der Benutzername im Klartext, gefolgt vom jeweiligen verschlüsseltem Passwort.

Achtung!

Wenn man die Möglichkeit hat, die Authentifizierungsdatei ausserhalb des htdocs Verzeichnisses zu speichern, sollte man die auch tun, da sonst die Möglichkeit besteht, dass Unbefugte Einsicht in diese Datei bekommen können.
Hat man beim Provider ein eigenes CGI Verzeichnis, so kann man die Datei dorthin kopieren, da das CGI Verzeichnis in der Regel ausreichend gegen unbefugten Zugriff geschützt sein sollte.


Direktiven

Die nötigen Direktiven:

In unsere .htaccess Datei fügen wir nun ein paar Direktiven ein, damit nur die berechtigten Benutzer aus unserer Authentifizierungsdatei auf unsere Website zugreifen können.

AuthType Basic
AuthName "plantage"
AuthUserFile C:/Apache/htdocs/password
require valid-user

Mit AuthType wird die Art der Authentifizierung festgelegt, Basic war bis vor kurzem die einzige Möglichkeit, es gibt aber auch noch Digest, welche zur Zeit leider von keinem Browser unterstützt wird.
AuthName gibt den Bereich an, in dem Name und Passwort des Benutzers gültig sind. Wenn im Bereichsnamen Leerzeichen vorkommen, muß der Bereichsname in Anführungszeichen stehen (z.B. "Bananen Plantage").
AuthUserFile gibt den Pfad zu der Authentifizierungsdatei an, am Besten verwendet man hier eine absolute Pfadangabe.
Mit require wird die Passwortprüfung aktiviert, valid-user bedeutet hier, dass alle Benutzer, die in unserer Authentifizierungsdatei stehen akzeptiert werden.

Soll nur eine einzelne Datei vor unberechtigtem Zugriff geschützt werden kommt noch die FilesMatch Direktive hinzu:

<FilesMatch "dateiname\.html">
AuthName "plantage"
AuthType Basic
AuthUserFile C:/Apache/htdocs/password
require valid-user
</FilesMatch>

In der FilesMatch Direktive wird der Name der zu schützenden Datei angegeben.

Damit das Ganze funktioniert, muss in der httpd.conf des Apache noch folgende Direktive stehen:

-----------------Ausschnitt-------------------------

# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride All

-----------------Ausschnitt-------------------------

"AllowOverride All" bedeutet, dass mittels der .htaccess Datei alle Direktiven überschrieben werden dürfen, dies ist hier zwar nicht nötig, "AllowOverride AuthConfig" würde reichen, aber für ein Entwicklersystem zum weiteren Experimentieren in Ordnung.



Test

Als letztes die .htaccess Datei in das gewünschte Verzeichnis kopieren und den Webserver neu starten, da wir ja eine Direktive in der httpd.conf geändert haben.
Wenn nun die Website im Browser aufgerufen wird (oder das geschützte Verzeichnis) sollten wir eine Passwortabfrage präsentiert bekommen.

login