Schutz von Verzeichnissen durch .htaccess unter Apache

Die Situation ist einfach: Man möchte nicht allen Zugang zu bestimmten Verzeichnissen und deren Dateien geben. Nun gibt es mit dem Webserver Apache einen relativ einfachen Schutz solcher Verzeichnisse und aller darunter liegender Dateien und Verzeichnisse.
Der Kern des Schutzes liegt in der sogenannten .htaccess Datei, in der die Regelungen zum Schutz und der Anzeige des Verzeichnisses eingetragen werden können.

Erster Schritt: Einstellung im Apache-Server anpassen

Damit überhaupt die Befehle, die in der .htaccess-Datei später stehen, akzeptiert werden, muß die Grundinstallation des Apache-Webservers angepaßt werden.

Die Konfigurationsdatei des Apache heißt entweder httpd.conf oder apache.conf und befindet sich (bei Standardinstallationen) unter Linux im Verzeichnis /etc/apache/ bzw. bei Windows unter C:\Programme\Apache Group\ApacheX\conf\ (X steht für die Versionsnummer, falls vorhanden). Die Datei muß folgende Einträge haben:

Beispiel einer httpd.conf Datei

Kommentarzeilen die mit # anfangen werden nicht gezeigt.
In der Zeile AllowOverride muß statt dem Wert None der Wert All eingetragen werden, damit das Überschreiben der allgemeinen Regeln durch die .htaccess-Datei erlaubt ist.
Die Options geben an, was wie geregelt wird, also in dem unten stehenden Beispiel bedeutet Indexes, daß das Verzeichnis angezeigt werden darf, wenn keine index.html Datei vorhanden ist. Mit FollowSymLink darf der Apache auch Links folgen, die nur symbolischer Natur sind.

Unter Windows

[...]
DocumentRoot "F:/Webseiten"
[...]
<Directory "F:/Webseiten">
  Options Indexes FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>
[...]
AccessFileName .htaccess
[...]

Unter Linux

[...]
DocumentRoot "/var/www"
[...]
<Directory "/var/www">
  Options Indexes FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>
[...]
AccessFileName .htaccess
[...]

Zweiter Schritt: Paßwortdatei anlegen

Diese Datei läßt sich einfach mit dem, in dem Installationspaket begelegten htpasswd-Programm erzeugen. Dieses Programm befindet sich beim Linux unter /usr/bin/htpasswd und unter Windows im Verzeichnis C:\Programme\Apache Group\ApacheX\bin\htpasswd.exe.

Wichtig für Windows-Benutzer. Das Programm htpasswd ist ein DOS-Programm, d.h. ein Doppelklick darauf erzeugt nur ein schwarzes Fenster mit Inahlt, daß daraufhin sofort wieder geschlossen wird. Um das Programm nutzen zu können, sollte daher die alte MS-DOS-Kommandozeile verwendet werden:
Startmenü -> Ausführen -> command (bzw. unter Windows 2000/XP cmd)
Nach der Bestätigung öffnet sich ein Schwarzes Fenster in dem Befehle eingegeben werden können. Nun müssen wir ins Verzeichnis des Programms htpasswd.exe wechseln.

  1. "C:" eintippen (ohne Anführungszeichen!) und mit Returntaste bestätigen (zum Wechsel auf das Laufwerk C:)
  2. "cd \Programme" (Wechsel in ein Verzeichnis)
  3. "cd Apache Group"
  4. "cd Apache2" (wenn es der Apache 2 ist)
  5. "cd bin"

Beim Aufruf ohne Parameter gibt dieses Programm einen Hilfstext mit den möglichen Parametern aus.
Es ergibt sich daraus folgender Aufruf, wenn das Verzeichnis "bilder" geschützt werden soll:

htpasswd -c /var/www/bilder/.htpasswd benutzername  (unter Linux)
htpasswd -c F:\Webseiten\bilder\.htpasswd benutzername  (unter Windows)
Wobei der Parameter -c eine neue Paßwortdatei anlegt. Wird das -c weggelassen, so wird einer bestehenden Datei ein weiterer Benutzer hinzugefügt.
Der oben gewählte Name der Paßwortdatei lautet .htpasswd - dies hat zweierlei Gründe: Der führende Punkt verhindert, daß der Apache diese Datei versehentlich anzeigt (normale Konfiguration des Apache vorausgesetzt). Die Datei heißt wie das Programm, damit man sich leichter daran erinnern kann, mit welchem Programm es erzeugt wurde :-).
Anstelle des Namens "benutzername" kann (und sollte) auch ein beliebiger anderer Name stehen, wie z.B. "Ich", "bilder", "Zugang" etc.
Nach dem Aufruf fragt das Programm zweimal nach einem Paßwort. Dieses wird mit dem Benutzernamen in die angegebene Datei hineingeschrieben, wobei das Paßwort verschüsselt ist.

Beispiel für eine .htpasswd-Datei

Zugang:$apr1$Pc5.....$toI30xNojKgLDIc5FRa3k.
So kann niemand erahnen, daß das Paßwort für den Namen "Zugang" "Test" lautet ... upps - verrraten ;-)

Dritter und letzter Schritt: Anlegen einer .htaccess-Datei

Diese Datei ist das Kernstück von allem, denn darin steht das Kommando für den Apache Nach Name und Paßwort zu fragen und es mit den Daten in einer angegebenen Datei zu vergleichen.
Da diese Datei eine einfache Textdatei ist, legt man sie als solche einfach in dem selben Verzeichnis an, in dem auch die .htpasswd-Datei steht. Mit folgendem Inhalt:

.htaccess

AuthType Basic
AuthName "Interner Bildbereich"
AuthUserFile .htpasswd
require valid-user

.htaccess mit Pfadangabe

AuthType Basic
AuthName "Interner Bildbereich"
AuthUserFile F:/Webseiten/bilder/.htpasswd
require valid-user

Unter Umständen ist die Angabe des kompletten Pfades notwendig! (siehe rechte Spalte)

Der AuthType Basic erzwingt vom Apache, daß er - sobald jemand ins Verzeichnis wechseln möchte - eine Art PopUp-Fenster öffnet und nach Name und Paßwort fragt.
Beim AuthName kann beliebiger Text eingegegen werden. Dieser wird dann bei der Abfrage mit angegeben. Der Text muß jedoch in doppelte Anführungszeichen gesetzt werden.
Die Angabe des AuthUserFile .htpasswd gibt an, in welcher Datei die Namen und Paßwörter zum Vergleich stehen.
Und letztlich darf durch den Befehl require valid-user nur ein authentifizierter Benutzer den Zugang erhalten.

Finale

Wenn alles geklappt hat, dann sollte folgendes auftauchen, sobald jemand in das Verzeichnis "bilder" hinein wechseln möchte:

Ob jemand dadurch errät, daß der Benutzername "Zugang" und das Paßwort "test" ist? :-)

© 08/2004 · Dirk Weikard