.
Anwendung von .htaccess-Dateien
.
Heinrich-Heine-Universität Düsseldorf Universitätsrechenzentrum

Wofür braucht man das?
An wen ein HTTP-Server Dokumente herausgibt, welche spezielle Verarbeitung er u.U. bei einer spezifischen Anforderung (einem request) durchführt - all das wird zunächst durch eine von der Server-Software abhängigen Konfiguration bestimmt, die ein Administrator - ein Webmaster - eingerichtet hat.

Oft ist es aber wünschenswert, daß einzelne Verantwortliche für eine Dokumentenhierarchie auf dem Web-Server selbst ohne Intervention des Webmasters Setzungen vornehmen können, daß z.B. auf einzelne Dokumente oder alle in einem bestimmten Verzeichnis nur ein Zugriff aus bestimmten Domains oder mit verifiziertem Usernamen möglich ist.

Beim Apache-HTTP-Server wie seinem Vorgänger, dem NCSA-httpd, gibt es diese Möglichkeiten durch die Einrichtung von .htaccess-Dateien in dem jeweiligen Verzeichnis. In der folgenden Darstellung wird als Referenz jeweils ein Verweis auf den entsprechenden Abschnitt in der lokale Kopie der Apache-Dokumentation für die Version 1.2 gegeben.

Achtung: In der Server-Konfiguration kann ein anderer Name als .htaccess vereinbart sein (AccesFileName-Direkt ive).

Zweiter Hinweis: Die Datei muß für den HTTP-Server lesbar sein, z.B. dadurch erreicht, daß sie öffentlich lesbar ist:

chmod 644 .htaccess
1. Zugriffsbeschränkung auf eine Domain
...für alle Dateien in einem Verzeichnis
.htaccess
order deny,allow
deny  from all
allow from .uni-duesseldorf.de 134.99 

Alle Dateien in dem Verzeichnis werden nur an Clients ausgeliefert, die eine IP-Adresse beginnend mit 134.99 oder einen Hostnamen endend mit uni-duesseldorf.de besitzen; anderenfalls erfolgt eine Fehlermeldung des Servers (403 Forbidden).

Natürlich genügt in vielen Fällen eine der Alternativen. Beachten Sie dabei die Unterschiede:

  • Die Angabe des Domain-Namens allein schließt - bewußt oder nicht - den Zugriff von PC's aus, die nicht im Domain Name System (DNS) registriert sind.
  • Die Angabe des IP-Subnetzes allein kann andere ausschließen, die organisatorisch zur gleichen Domain gehören, technisch aber in einem anderen Subnetz hängen.

Wie lässt sich diese Zugriffsbeschränkung testen? Normalerweise benötigt man dazu einen Internet-Zugang über einen anderen Provider (T-Online, AOL, Compuserve etc.). Oder man benutzt einen Browser auf dem Server selbst z.B. in folgender Weise:

lynx http://localhost/Service/Webmaster/htaccess.phtml
Der Zugriff erfolgt dann über das Loopback-Interface mit der IP-Adresse 127.0.0.1.

Referenz: order, deny, allow.

2. Zugriffsbeschränkung auf eine Domain
...für einzelne Dateien
.htaccess
<Files huh*.html>
order deny,allow
deny  from all
allow from .uni-duesseldorf.de 134.99
</Files>

Die Zugriffsbeschränkung wie oben gilt jetzt nur für die Dateien, deren Namen auf das hinter Files angegebene Muster passen. Es kann ein einzelner Name angegeben werden oder ein Muster mit den Wildcard-Zeichen ? für ein beliebiges einzelnes Zeichen oder * für eine beliebige Folge von Zeichen.

Schließlich sind auch feinere Muster über reguläre Ausdrücke möglich. Die Syntax der Files-Direktive dafür ist:

<Files ~ "regexp">
Referenz: <Files>, order, deny, allow.
3. Zugriffsbeschränkung über Passwort
...für alle Dateien in einem Verzeichnis
.htaccess
AuthType Basic
AuthName MeyersLeute
AuthUserFile /home/meyer/passwd
require valid-user

Dokumente in einem Verzeichnis mit dieser .htaccess-Datei (oder einem Unterverzeichnis) können erst nach Eingabe eines gültigen Benutzernamen und Passwortes gelesen werden. Der Wert hinter AuthName wird vom Browser in der Dialog-Box für die Passwortabfrage angezeigt und dient gleichzeitig dazu, andere Dokumente mit dem gleichen Schutz zu erkennen und einmal eingelesene Werte für Username und Password ohne erneute Abfrage unmittelbar zu verwenden.

Hinter AuthUserFile steht der Pfad der Passwortdatei, die die Benutzernamen und (verschlüsselten) Passwörter enthält. Sie sieht etwa so aus:

/home/meyer/passwd
meyer:xm.kPd4VJc3Fo
mueller:eJFQCL8GftDXI

Auch die Passwortdatei muß für den HTTP-Server lesbar sein. Gerade deshalb sollte sie niemals in demselben Bereich liegen wie die vom Server bedienten Dokumente, da sonst zumindest die gültigen Benutzernamen lesbar wären. (Aus diesem Grund müssen Sie aber u.U. daran denken, auch das entsprechende Verzeichnis - wie /home/meyer im Beispiel - für den HTTP-Server zumindest suchbar zu setzen, also etwa:

chmod 711 /home/meyer
Angelegt und gepflegt werden kann die Passwortdatei mit dem Programm htpasswd:
htpasswd -c /home/meyer/passwd meyer
htpasswd /home/meyer/passwd mueller
Referenz: AuthType, AuthName, AuthUserFile, require.
4. Zugriffsbeschränkung über Passwort
...für einzelne Dateien
.htaccess
AuthType Basic
AuthName MeyersLeute
AuthUserFile /home/meyer/passwd
<Files Huh*.html>
require user meyer mueller
</Files>

Die Kombination von 2. und 3. - Passwortschutz für einzelne Dateien in dem aktuellen Verzeichnis. Beim require wird hier noch eine andere Alternative gezeigt: die Aufzählung einzelner Benutzernamen aus der Passwortdatei. Wenn neue Benutzer in der Passwortdatei ergänzt werden, haben diese noch keinen Zugriff auf die so geschützten Seiten.

Wenn die gleiche Liste von Benutzern an mehreren Stellen verwendet werden soll, ist die Definition der Liste über eine Gruppendatei empfehlenswert. Für diese dritte Alternative bzgl. der require-Direktive sind fogende Änderungen notwendig:

  1. In der .htaccess-Datei wird eine Gruppendatei angegeben:
    AuthGrouprFile /home/meyer/groups
    Für den Ort der Ablage dieser Datei gelten dieselben Erwägungen wie für die Passwortdatei oben.
  2. In der require-Direktive wird jetzt auf eine Gruppendefinition in der Gruppendatei Bezug genommen:
    require group meyers
  3. Die Gruppendatei ist eine einfache Textdatei mit je einer Gruppendefinition pro Zeile in folgender Form:
/home/meyer/groups
meyers: meyer mueller

Referenz: AuthType, AuthName, AuthUserFile, AuthGroupFile, <Files>, require.

5. Spezielle Optionen
...z.B. automatischer Index
.htaccess
Options +Indexes

Mittels der Options-Direktive können - so von der globalen Server-Konfiguration her erlaubt - Voreinstellungen für Verarbeitungsoptionen für das aktuelle Verzeichnis und Unterverzeichnisse überschrieben werden.

Die gezeigte Variante weist den Server an, bei der Referenz auf das aktuelle Verzeichnis oder ein Unterverzeichnis ein Directory-Listing als Index-Datei automatisch zu generieren. Er macht dies allerdings nur, wenn nicht schon eine Index-Datei (mit vordefiniertem Namen wie index.html) vorhanden ist. Ggf. kann man die hier bekannten Namen mit der Direktive

DirectoryIndex Welcome.html
einschränken.

Referenz: Options, DirectoryIndex.

Nachbemerkung
Diese Darstellung bzgl. der Möglichkeiten mit .htaccess-Dateien ist bei weitem nicht vollständig. Vieles mehr finden Sie in der Originaldokumentation:

Referenz: Apache User's Guide.


Bernd Cappel, zuletzt geändert am 16.12.1997