Springe zu: Hauptnavigation, Themennavigation, Seiteninhalt, Spezielle Seiten

Einfacher Passwortschutz für Verzeichnisse

In diesem Artikel zeige ich an einem praktischen Beispiel, wie man einen Passwortschutz für ein Verzeichnis einer Internetseite einrichten kann. Der Besucher wird vor dem Betreten des geschützten Bereiches zur Eingabe von Benutzername und Kennwort aufgefordert.

Die Datei .htaccess

Die Konfiguration des Apache Webservers kann man nicht nur in der zentralen Konfigurationsdatei und in den Dateien für virtuelle Hosts beeinflussen. Angaben, die in der dezentralen Datei gemacht werden, sind nur für das aktuelle Verzeichnis und all seinen Unterverzeichnissen gültig. Der Name dieser Datei, die in allen Verzeichnissen gesucht wird, lautet meist .htaccess. Der name der zu suchenden Datei kann aber mit der Direktive AccessFileName geändert werden.

Ändert man Einstellungen des Webservers über diese Datei, muss dieser nicht neu gestartet werden. Die Änderungen werden beim nächsten Aufruf einer Seite wirksam.

Nicht jede Apache Direktive kann innerhalb einer .htaccess-Datei verwendet werden. Welche Typen geändert werden können, wird mit der Direktive AllowOverride gesteuert. Diese hat standardmäßig den Wert all, was bedeutet, dass man alle Direktiven verwenden kann, die im Kontext htaccess erlaubt sind. Den Pfad zum Root-Verzeichnis der Webpräsents kann man beispielsweise nicht über die htaccess-Datei verändern. Ein Passwortschutz kann damit hingegen eingerichtet werden.

Inhalt der .htaccess-Datei

Im folgenden Beispiel soll das Verzeichnis /privat/ der Website lfb.local mit Benutzername und Kennwort geschützt werden. In der Datei .htaccess, die im Ordner privat abzulegen ist, stehen z. B. folgende Anweisungen:

AuthType Basic
AuthName "Privater Bereich"
AuthUserFile /var/www/lfb.local/privat/htpasswd
Require valid-user

Die Anweisung AuthType legt den Typ der Authentifizierung fest. Die Variante Basic wird von den meisten Browsern unterstützt und wird in diesem Artikel behandelt.

Beim Anmelden wird dem Besucher der name des geschützten Bereichs angezeigt. Dieser sogenannte Realm wird mit der Direktive AuthName festgelegt und im gezeigten Beispiel auf den Wert “Privater Bereich” gesetzt. Wo sich die Datei mit den Zugangsdaten für die Benutzer befindet, steuert man mit der Direktive AuthUserFile. Es ist wichtig, dass der komplette Pfad auf dem Server angegeben wird. In meinem Fall befindet sich die Datei im ordner /var/www/lfb.local/privat/, was nicht wirklich sicher ist. Da die Datei unterhalb des DocumentRoot-Verzeichnisses (/var/www/lfb.local/) liegt, kann diese von Website-Besuchern heruntergeladen werden. Es wäre sicherer, die Datei nicht innerhalb von DocumentRoot abzulegen. Dann könnte man die Benutzernamen nicht auslesen. In der letzten Zeile wird definiert, dass jedem Benutzr der Zugang gestattet wird. Man kann nämlich auch nur einzelnen Benutzern oder Mitgliedern bestimmter Benutzergruppen den Zugang erlauben, was hier nicht beschrieben wird.

Anlegen der Passwort-Datei

Nun ist noch die Datei htpasswd mit den Zugangsdaten der erlaubten Benutzer zu erstellen. Der Aufbau der Datei ist sehr einfach: Benutzername und Kennwort stehen in einer Zeile und werden durch einen Doppelpunkt voneinander getrennt. Das Kennwort ist nicht im klartext, sondern verschlüsselt hinterlegt. Die Schwierigkeit besteht nun darin, das Kennwort zu erstellen.

htpasswd – Anlegen und Verwalten von Benutzern

Unter Linux kann das Programm htpasswd zur leichten Erstellung und Pflege dieser Datei verwendet werden. Ausführliche Infos zu den Möglichkeiten dieses Befehls findest du in der Manpage zu htpasswd oder im Artikel htpasswd – Manage user files for basic authentication.

Der folgende Befehl erstellt die Passwort-Datei htpasswd, fügt den benutzer simon hinzu und fordert zur Eingabe und Bestätigung des Kennwortes auf:

htpasswd -c htpasswd simon

Soll ein vorhandenes Kennwort aktualisiert oder die vorhandene Datei um einen neuen Benutzer erweitert werden, ist folgender Befehl einzugeben:

htpasswd htpasswd lfb

Wenn ein Benutzer aus der Datei gelöscht werden soll, ist die Option -D zu verwenden:

htpasswd -D htpasswd simon

PHP-Skript zum Erzeugen des Kennwortes

Wenn man keinen Shell-Zugang zum Erzeugen des Kennwortes zur Verfügung hat, kann man sich auch mit einem kleinen PHP-skript helfen.

Das folgende Formular erfragt Benutzername und Kennwort und gibt nach dem Absenden der Daten die Zeile für die Passwort-Datei aus:

<h1>Zeile für htpasswd-Datei erzeugen</h1>
<form method="post" action="">
<p>Benutzername: <input type="text" name="user" size="10" /></p>
<p>Kennwort: <input type="text" name="pass" size="10" /></p>
<p><input type="submit" value="Verschlüsseln" /></p>
</form>

<?php
if ($_POST['user'] and $_POST['pass']) {
    echo '<p>'.$_POST['user'].':'.crypt($_POST['pass']).'</p>';
}
?>

Testen der Anmeldung

Wenn man die Passwortdatei erstellt und diese zusammen mit der Datei .htaccess in das Verzeichnis kopiert hat, kann man das geschützte Verzeichnis im Browser aufrufen und sollte zur Eingabe von Benutzername und Kennwort aufgefordert werden.

Datum der Veröffentlichung: Mittwoch, 21.03.2007

Nach oben

Diese Seite drucken