www.kortstock.de
  [über] [Word-Doku] [Pegasus Mail] [WWW und HTML] -

Verzeichnisschutz/Passwortschutz mit htaccess sowie SSI/PHP

Zurück zur Übersicht Verzeichnisschutz mit htaccess und SSI.

htaccess

Grundlagen

Funktionsweise

htaccess dient der Zugriffssteuerung auf Apache-Webservern (also den meisten Servern im Internet heutzutage). Dabei kann die Steuerung global für den Server (von der Dokumentation von Apache empfohlen, wenn Zugriff auf die zentralen Konfigurationsdateien besteht) oder lokal für einzelne Verzeichnisse oder Dateien wirken. Hier soll es um die zweite Variante gehen. Die Möglichkeit, mit htaccess auch die Fehlerseiten und viele andere Einstellungen anzupassen, werden hier ebenfalls nicht behandelt.

Mit htaccess lassen sich zwei Typen von Zugriffsbeschränkungen realisieren: Schutz durch eine Passwortabfrage (Authentifizierung) und Beschränkung des Zugriffs auf bestimmte Rechner (IP-Adresse).

Grundlage für die Zugriffbeschränkung ist eine Datei in den Verzeichnis, das ganz oder teilweise zu schützen ist. Diese Datei heißt .htaccess (wobei der Punkt am Beginn des Namens bedeutet, daß Unix sie als versteckte Datei behandelt, also nicht immer anzeigt). Der Administrator des Servers kann den Namen der Datei auch anders festlegen. Dabei wird er aber nur selten von der Vorgabe .htaccess abweichen.

Serverseitige Voraussetzungen

Die Zugriffsbeschränkung (und auch alle anderen Steuerungsmöglichkeiten über .htaccess) funktionieren nur, wenn diese Möglichkeit vom Administrator des Servers freigegeben wurde. Dabei kann er durchaus nur einige der Möglichkeiten erlaubt haben, experimentieren Sie also ruhig ein wenig!

Wenn Sie selbst der Administrator sind, können Sie hier eine Beschreibung der zentralen Konfigurationsmöglichkeiten finden: Version 2.4.

Für die verschiedenen Authentifizierungsmechanismen müssen Sie die entsprechenden Module einbinden: Für Basic das Modul mod_auth, für die sicherere Methode Digest das Modul mod_auth_digest (dies sind die in Apache vorhandenen Standard-Module).
Um bestimmte IP-Adressen, Hostnamen u.ä. auszuschließen, müssen Sie das Modul mod_access einbinden.

Stellen Sie sicher, daß der Apache-Server (nur die Version 2.0.51) einen hier beschrieben Fehler nicht mehr enthält, indem Sie den entsprechenden Patch einbauen.

Automatische Erstellung

Die Erstellung und Bearbeitung der Steuerdatei .htacces ist mit einigen Grundkenntnissen nicht sonderlich schwer. Es existieren aber auch einige Programme bzw. WWW-Seiten, die dies alles automatisieren und so auch für den Nutzer mit wenigen Kenntnissen ermöglichen. Zudem bieten einige Provider wie z.B. 1&1 einen Paßwortschutz im Rahmen des jeweiligen "Homepagebaukastens" an. Näheres unten.

Aufbau der Datei .htaccess

Hier zunächst ein Beispiel für den Inhalt einer .htaccess-Datei:

# Beschreibung
AuthType Basic 
AuthUserFile /www/home/Fakultaeten/Jura/richardi/admin/.passwd 
AuthName "geschuetzer Bereich" 

order deny,allow
allow from all
require valid-user

Die Raute (#) ist das Kommentarzeichen. Wenn es am Beginn einer Zeile steht, wird der Rest der Zeile nicht interpretiert. Das ist nützlich einmal für Beschreibungstexte; außerdem können Sie so schnell einmal Änderungen ausprobieren, indem Sie die entsprechende Befehlszeile "auskommentieren" und dann ggf. nach Entfernung des Kommentarzeichnes wieder ausführen lassen.

Mit AuthType Basic legen Sie die Art der Authentifizierung fest. Basic ist hier die Methode der Wahl: Zwar wird die Passwortübertragung nicht verschlüsselt, aber sie wird von den gängigen Clients (= Browsern) unterstützt. Andere Typen gibt es auch, das hängt aber von der Konfiguration Ihres Servers ab (z.B. LDAP). Von Apache mitgeliert wird Digest, das v.a. eine gesicherte Übertragung des Passwortes ermöglicht, aber von Clients wohl noch kaum unterstützt wird. Vgl. dazu die Apache-Dokumentation.

Der Befehl AuthUserFile enthält den Pfad auf dem Server, unter dem die Datei mit den Benutzernamen und Paßwörtern zu finden ist. Dieser Pfad wird sich zumindest teilweise von der URL unterscheiden. Beachten Sie auch, daß der WWW-Server Zugriff auf die Datei haben muß - andererseits sollten Sie je nach Konfiguration versuchen, die Passwortdatei nicht per WWW abrufbar zu halten. Idealerweise sollte sich diese also nicht im normalen WWW-Baum befinden. Im Beispiel ist dies aus technischen Gründen nicht verwirklicht. Sie können aber das Verzeichnis, in dem die Datei sich befindet, selbst mit htaccess schützen, z.B. durch eine Begrenzung des Zugriffs auf bestimmte IP-Adressen (oder im Extremfall durch Zugriff von gar keiner IP-Adresse). Näheres zu dieser Variante gleich.
In der Beispielkonfiguration lautet der Name der Datei .passwd. Wie man diese Datei erstellt, wird in einem der folgenden Abschnitte beschrieben. Der Punkt vor dem Namen bedeutet unter Unix, daß es sich um eine versteckte Datei handelt, die nicht ohne weiteres sichtbar ist.
Wenn Sie für die Passwort-Datei einen falschen Pfad angegeben haben oder die Zugriffsrechte nicht richtig gesetzt sind, können Sie dies daran erkennen, daß zwar die Passwortabfrage beim Anschauen der geschützten Web-Seite angezeigt wird, aber immer die Meldung "Authorization failed. Retry?" (Beispiel aus Netscape) erscheint.

order deny, allow legt fest, daß zunächst einmal jeder Zugriff verboten ist, wenn er nicht ausdrücklich erlaubt ist. Hier mutet diese Einschränkung vielleicht etwas übertrieben an, aber so lassen sich Flüchtigkeitsfehler vermeiden.

Mit allow from all wird eine Beschränkung des Zugriffs auf bestimmte IP-Adressen festgelegt. Im Beispiel soll aber lediglich ein Passwortschutz eingerichtet werden, so daß alle IP-Adressen zugreifen dürfen.

Der Befehl require valid user schließlich erzwingt die Passwortabfrage, deren Erfolg erst den Zugriff auf die Seiten des Verzeichnisses gewährt. Sollten Sie mehrere User in der Passwortdatei angelegt haben, werden alle zugelassen, wenn Sie sich authentifiziert haben. Sie könnten den Zugriff auch auf bestimmte Nutzer beschränken, dazu unten.

Reichweite: Die hier beschriebene Konfiguration schützt alle Dateien in dem Verzeichnis, in dem sich auch die Datei .htaccess befindet sowie alle darunter liegenden Verzeichnisse.

Variante: Sie können mit htaccess auch Benutzergruppen anlegen und gruppenweise den Zugang gestatten. Dazu unten mehr.

Wirkung

Das Passwort wird, wenn es korrekt ist, vom Browser gespeichert, bis dieser geschlossen wird. Dann wird das Passwort immer wieder an den WWW-Server gesendet. Es muß also erst dann wieder neu eingegeben werden, wenn man den Browser neu startet und eine geschützte Datei aufruft.
Auf der anderen Seite kann es auch erst nach Neustart des Browsers neu eingegeben werden. Wenn Sie also Zugriff für verschiedene Nutzer von einem Browser aus benötigen, haben Sie ein kleines Problem.

Sie können Benutzernamen und Passwort auch vor die URL stellen (http://user:password@www.site.de). Das ist aber natürlich gefährlich, da so das Passwort für jeden Anwesenden lesbar auf Ihrem Bildschirm erscheint (eine löbliche Ausnahme bildet hier der Browser Opera, der das Passwort auch dann nur verdeckt anzeigt).

Wenn man in dem Dialogfenster, daß die Passwortabfrage enthält, auf Abbrechen klickt, wird man auf eine Seite mit einer Fehlermeldung (Fehler 403) geleitet, die allerdings nur auf Serverebene editierbar ist, im Zweifel also keine hilfreichen Informationen für den Besucher enthält.

Bedenken Sie, daß bei Benutzernamen und Passwort zwischen Groß- und Kleinschreibung unterschieden wird!

Varianten

Sie können nicht nur einen Nutzer erstellen, der Zugriff hat oder allen authentifizierten Nutzern den Zugriff gestatten. Es ist auch möglich, nur bestimmten Nutzern aus den in der Passwortdatei definierten den Zugriff zu einer bestimmten Seite zu erlauben. Dabei können Sie die berechtigten Nutzer einzeln aufzählen oder in Gruppen zusammenfassen und dann dieser Gruppe die Zugriffsrechte geben.

Gruppen

Um mit Gruppen arbeiten zu können, fügen Sie unter dem Verweis auf die Datei mit den Paßwörtern eine Zeile ähnlich der folgenden ein:

authGroupFile /www/home/Fakultaeten/Jura/richardi/admin/.gruppen

Die dort referenzierte Datei enthält dann im Textformat unter Bezug auf die in der Passwortdatei festgelegten Benutzernamen die Gruppenzuordnung, z.B.:

# Kommentarzeilen funktionieren!
# Gruppe: Mitglieder
professoren: mueller meier schulze

Zugriff nur für bestimmte Nutzer / Gruppen

Im einfachen Beispiel oben haben wir nur den Befehl require valid user verwendet. Daher wurden alle authentifizierten Benutzer zugelassen. Gerade wenn Sie mit einer zentralen Passwortdatei für mehrere Verzeichnisse arbeiten, möchten Sie eventuell nur bestimmte Nutzer oder Gruppen zulassen. Dazu dienen die folgenden Befehle:

require user [name1] [name2] [...]
require group [gruppe1]

Nur bestimmte Zugiffsformen zulassen

Für die einzelnen HTTP-Zugriffe (GET, PUT, POST) können Sie unterschiedliche Zugriffsberechtigungen festlegen. Dies ist interessant, wenn Sie nur bestimmten Nutzern das Abschicken von Formularen gestatten wollen, das Anschauen der Formulare aber jedem. Die Methode GET dient dabei zum Betrachten von WWW-Seiten.

Teilen Sie Ihre htaccess-Datei in Bereiche auf:

<Limit GET>
  # hier die Beschränkungen für das bloße Anschauen der Seiten
</Limit>
<Limit POST PUT>
  # hier die Bechränkungen zum Absenden von Formularen
</Limit>

IP-Beschränkung

Eine Beschränkung auf bestimmte IP-Adressen ist leicht zu realisieren. Ich verweise dazu auf das Beispiel oben: Wenn Sie nicht beide Methoden kombinieren wollen, entfernen Sie lediglich die Befehle, die sich auf den Passwortschutz beziehen (AuthType, AuthUserFile, AuthName, Require Valid User) und ändern Sie den Befehl allow from all in allow from [IP-Subnetz]. Sie können mehrere Zugriffsberechtigte, die nicht aus einem Subnetz kommen, kombinieren, indem Sie sie einfach nacheinander auf allow setzen:

order deny,allow
allow from 132.199
allow from 155.155.155.155

Das Beispiel gestattet allen Rechnern des Subnetzes der Uni Regensburg (132.199.x.x) den Zugriff sowie dem Rechner mit der IP 155.155.155.155 - für alle anderen gilt die Grundregel: deny.
Statt einer IP-Adresse können Sie auch eine Domain verwenden (z.B. .kortstock.de, die Auflösung von IP-Adressen in Domain-Namen muß aktiviert sein).

Kombinationen

Die eben aufgezählten Möglichkeiten können Sie auch kombinieren. Dabei ist die Kombination "Passwort und IP" trivial. Aber Sie können auch alternativ (oder) kombinieren, so daß das Passwort nur verlangt wird, wenn nicht der Zugriff von einer bestimmten IP-Adresse kommt.

Dazu müssen Sie zunächst mit deny from all den Zugriff generell verbieten. Nun können Sie Nutzern von einer bestimmten IP-Adresse den Zugriff erlauben. Dann fügen Sie noch einen Block für die Passwortabfrage ein und schließen mit dem Befehl satisfy any.

Sie müssen für das jeweilige Verzeichnis allerdings auch die Direktive AllowOverride AuthConfig definiert haben. Diese steuert das Verhalten von satisfy.

Weiteres

Hier kann ich leider nicht die weiteren Möglichkeiten beschreiben. Es ist z.B. möglich, Nutzern mit bestimmten Browsern oder (eher relevant) gewissen Robotern der Suchmaschinen den Zugriff verweigern. Wenn Sie diese Möglichkeiten interessieren, möchte ich Sie auf die Dokumentation des Apache-Webservers verweisen. Hier werden Sie in den Kapiteln modules / mod_access und mod_auth fündig. Eine deutschsprachige Dokumentation bieten u.a. diese Seiten:

Erstellung der Passwortdatei

von Hand

Die Zugriffsteuerung und die User/Paßwörter sind in verschiedenen Dateien gespeichert. So kann also eine Passwortdatei durchaus von mehreren .htaccess-Dateien verwendet werden.

Die Passwortdatei (in unserem Beispiel soll sie .passwd heißen), kann man mit einem speziellen kleinen Programm namens htpasswd erzeugen. Dies ist in den Dateien für Apache enthalten und existiert dementsprechend in Varianten für alle Betriebssysteme, für die auch eine Apache-Version existiert. Verwenden Sie sicherheitshalber jeweils die Version von htpasswd für das Betriebssystem, unter dem auch der Server läuft.

Für den Uni-Webserver Regensburg (läuft unter Solaris) können Sie diese Version verwenden (32 KByte).

Wenn Sie eine neue Datei erstellen wollen, rufen Sie das Programm mit htpasswd -c Dateiname Username auf. Wenn die Datei bereits existiert (also ab dem Hinzufügen des zweiten Benutzernamens), lassen Sie das -c weg.
Sie werden nun zur Eingabe des Passworts und zu dessen Wiederholung aufgefordert. Wenn es keine Fehlermeldungen gab, wurde die Datei korrekt mit Username und verschlüsseltem Passwort angelegt.

In der Datei finden Sie dann in etwa folgenen Text:

student:Y6kgOJD60.0uw
Student:.EhJuM6io982c

Im Beispiel wurde jeweils ein identisches Passwort für die User "student" und "Student" verwendet, um vorhersehbare Probleme der Anwender mit der Groß- und Kleinschreibung (die ja unterschieden werden) zu minimieren.
Wie Sie an dem Beispiel erkennen können, ist trotz identischem Passwort der sichtbare Text unterschiedlich, eine ganz einfache Methode zum Ausprobieren aller Paßwörter funktioniert also nicht. Laut SelfAktuell (Unterseite nicht mehr online) werden nur die ersten acht Zeichen des Passwortes ausgewertet.
Denken Sie auch daran, ein halbwegs schwer zu erratenes Passwort zu verwenden (eine Wiederholung des Benutzernamens ist eher schlecht).

Das Passwort wird mittels des Crypt-Mechanismusses verschlüsselt, der aber laut man-page nicht wirklich sicher ist: "crypt implements a one-rotor machine designed along the lines of the German Enigma, but with a 256-element rotor. Methods of attack on such machines are widely known, thus crypt provides minimal security." (Man-Page zu Crypt aus SunOS 5.9, Last change: 14 May 1997). Wenn also jemand Zugriff auf die Passwort-Datei auf dem Server hat, ist Ihr Sicherheitskonzept löchrig - auch wenn das nur in wenigen Fällen relevant werden dürfte.

Wenn Sie keine Programme auf Ihrem Server ausführen lassen können, können Sie sich die Datei auch selbst basteln, indem Sie den User-Namen gefolgt von einem Doppelpunkt eingeben und dann das verschlüsselte Passwort dahinter kopieren. Die Verschlüsselung können Sie in diesem Fall über einige Seiten im WWW durchführen lassen.

Bei besseren Providern (z.B. PureTec, aber auch vielen anderen) können Sie zwar bei den günstigen Homepages nicht per telnet htaccess starten, aber oft wird im Konfigurationsmenü eine entsprechende Möglichkeit angeboten, alles interaktiv zu erstellen. Allerdings stehen Ihnen dann meist nicht alle Möglichkeiten von htaccess zur Verfügung. Eine Beschreibung zum Vorgehen bei Puretec finden hier (verwenden Sie die dort erwähnte neuere Version). Alternativ können Sie natürlich per FTP die fertigen Dateien auf den Rechner verschieben.

automatisch über besondere Programme und WWW-Seiten

Teilweise bieten die Provider die Erstellung einer htaccess-Datei über ihre "Homepagebaukästen" an. Vorteil: Die Erstellung ist in die bekannten Programmen enthalten. Außerdem wird die Sicherheitsproblematik weniger kritisch, da der Provider ohnehin auf die Daten zugreifen kann.

Im Internet gibt es einige Seiten, die Ihnen dabei helfen, eine htaccess-Datei automatisch aufzubauen.

Die Benutzung ist einfacher als das händische Erstellen der Dateien, man sollte sich aber über einige Sicherheitsmängel klar sein:

Hier ein Beispiel:

Allerdings sind die Möglichkeiten teilweise etwas eingeschränkt. Z.B. können Sie nur einen Benutzer anlegen.

Einen noch etwas bequemeren Paßwortgenerator finden Sie auch hier: https://pro-ssl1.domainunion.de/htaccess/ (ohne SSL-Verschlüsselung der Übertragung: http://domainunion.de/htaccess/). Der Generator erstellt die htaccess-Datei und schreibt sie per FTP gleich an die richtige Stelle. Aber Vorsicht: Dazu verlangt die Seite natürlich die Angabe von Benutzernamen und Paßwort des FTP-Servers (verspricht aber zugleich, diese Daten nicht zu speichern). Diese Option sollten Sie nur vorsichtig nutzen; ggf. müssen Sie aus Sicherheitsgründen unmittelbar vor und nach der Nutzung der Seite das FTP-Paßwort ändern - dann ist ein Mißbrauch deutlich erschwert. Bedenken Sie, daß das FTP-Paßwort erheblich wichtiger als ein htaccess-Paßwort ist.
Weiterhin ist auch zu beachten, daß die Betreiber der Seite auch die Adresse kennen und speichern können, auf der das Paßwort eingesetzt wird; insoweit mag es aber möglich sein, auf einen temporären Speicherort zu setzen und dann die Datei zu verschieben und vorher etwas zu bearbeiten.

Grenzen der Sicherheit

Wenn noch andere auf den Server Zugriff haben sollten, müssen Sie bedenken, daß htaccess nur den Zugriff über das Internet beschränkt. Wer sich auf dem Server einloggt, kann Ihre Seiten ganz einfach anschauen. Diesen Zugriff können Sie nur mit der Vergabe von Zugriffsrechten auf der Ebene des Betriebssystems verhindern. Da aber zumindest immer der user www Zugriff haben muß (sonst kann er die Seiten ja nicht im Internet zur Verfügung stellen), wird es angesichts der begrenzten Zugriffsverwaltung unter Unix oft (wie z.B. an der Uni Regensburg) so sein, daß für WWW-Dateien der Zugriff für "all" freigegeben ist, also jeder Zugriff hat, der einen Account auf dem Server hat.
Das ist aber wie gesagt nur dann relevant, wenn Sie den Zugriff auch von Mitarbeitern o.ä. begrenzen wollen. In so einem Fall können Sie nur über Scriptsprachen mit CGI oder eine geänderte Serverkonfiguration weiterkommen.

Zudem ist, wie oben erwähnt, die Verschlüsselung der Paßwörter auf dem Server mit Crypt nicht völlig sicher.

Schließlich weise ich noch einmal auf die unsichere Übertragung des Passworts hin, die bereits am Anfang dieses Textes als allgemeine Schwäche angesprochen wurde (jedenfalls bei AuthType Basic).

Statistik

Wenn Sie an statistischen Daten über die per htaccess eingeloggten Nutzer oder auch über die fehlgeschlagenen Zugriffe interessiert sind, müssen Sie nur die Logfiles auswerten. Diese enthalten standardmäßig einen entsprechenden Eintrag. Wenn keine Authentifizierung stattfindet, wird statt des Benutzernamens ein Strich (-) gesetzt.
Über die Logfiles können Sie auch Fehlversuche erkennen. Es wird dann der Fehler 403 und der Benutzername gezeigt, mit dem der Betrachter der Seite sich einloggen wollte. Eine gewisse Vorsicht ist bei der Veröffentlichung von Statistiken angebracht, weil erfahrungsgemäß manche Nutzer Benutzernamen und Passwort verwechseln und so das Passwort in der Statistik auftauchen kann.

Sollten Sie keinen Zugriff auf die Logfiles haben, können Sie eventuell in Kombination mit PHP oder einer anderen Skriptsprache die Daten der eingeloggten User (also nicht die Fehlversuche) aufzeichnen. Dazu müssen Sie alle Seiten im geschützten Bereich als PHP-Seiten auslegen und dann in jeder Seite eine Routine einbauen, die die entsprechenden Daten in eine eigene Logdatei schreibt. Vorsicht! Solche Dateien können sehr groß werden und Ihre Plattenplatzbeschränkungen übersteigen.

zurück Server Side Includes (SSI) | PHP: Hypertext Preprocessor weiter

Zurück zur Übersicht Verzeichnisschutz mit htaccess und SSI.

-
Stand: 23. Juli 2012, Ulf Kortstock