Beruflich Dokumente
Kultur Dokumente
Webserver/htaccess/Passwortschutz – SELFHTML-Wiki
Lesedauer
30min
Schwierigkeitsgrad
mittel
Vorausgesetztes Wissen
Grundkenntnisse in
● Webserver
Eine der häufigsten Verwendungen von .htaccess ist die Einrichtung eines Passwortschutzes, sodass bestimmte Seiten oder Inhalte
nur nach Eingabe eines Passworts aufgerufen werden können und für andere Nutzer und auch für Suchmaschinen verborgen
bleiben.
Dies können im Aufbau befindliche, noch nicht vorzeigbare Seiten oder interne Mitgliederbereiche wie ein Vertretungsplan nur für
das Lehrerkollegium sein.
Um einen Passwortschutz einzurichten, brauchen Sie die Anweisungen AuthType, AuthName, AuthUserFile, und wenn Sie mit
Benutzergruppen arbeiten, auch AuthGroupFile. Ferner benötigen Sie, wenn Sie den Zugriff auf bestimmte Benutzer oder Gruppen
aus diesen Dateien festlegen (also einschränken) wollen, eine oder mehrere Angaben der Anweisung Require.
Damit der Verzeichnisschutz mit Passwort funktioniert, genügt die .htaccess-Datei alleine allerdings nicht. Sie brauchen zusätzlich
eine Text-Datei, in der (der Benutzername und) das zugehörige Passwort steht.
.htpasswd-Datei
# Passwort-Datei
name:$2y$05$MQ7RdCCRrKmBEDD/u4pks.9qAV8RCKy4YCP2pzgmc4lppfli41zC
Achtung!
Theoretisch können Sie Passwörter im Klartext notieren. Da sie so aber auch von Fremden ausgelesen werden können, sollten Sie
sie immer verschlüsseln. Dabei sollten Sie folgendes berücksichtigen:
Wenn nicht ausdrücklich vom Provider bzw. Webmaster anders bestimmt, sollten Sie außerdem für die Datei einen Namen wählen,
der mit .ht beginnt, üblicherweise eben .htusers oder .htpasswd. In der Konfiguration des Apache-Servers sind solche Dateinamen
als Grundeinstellung vorgegeben und werden, wie oben bereits erläutert, aufgrund des vorangestellten Punktes nicht zur Ansicht
freigegeben, bleiben also vor Besuchern verborgen.
Zusammen mit dem Apache wird ein kleines Hilfsprogramm ausgeliefert, das die Erstellung solcher Passwortdateien vereinfacht.
Es heißt htpasswd (unter Windows: htpasswd.exe) und ist über die Konsole (Eingabeaufforderung) zu bedienen. Rufen Sie es
einfach mit dem Befehl htpasswd -h auf, um eine kurze Hilfe zu seiner Verwendung zu erhalten. Im einfachsten Fall geben Sie zum
Beispiel
htpasswd -c .htusers smuenz
oder, falls Sie einen Apache 2.4 oder neuer haben, sehr viel besser:
htpasswd -c -B .htusers smuenz
ein. Sie müssen für den neuen Benutzer smuenz ein Passwort angeben und bestätigen. Diese Passwortdatei können Sie dann in das
vorgesehene Verzeichnis verschieben oder hochladen.
Bitte beachten Sie hinsichtlich der Option "-c": Es wird eine neue Passwortdatei angelegt! Wenn Sie das nicht wollen, weil das
bestehende Einträge löscht, dann lassen Sie das "-c" weg, die Einträge werden dann angehängt oder ersetzt.)
Sie können wahlweise das ganze Verzeichnis mit all seinen Unterverzeichnissen oder nur bestimmte Dateien oder Dateitypen
schützen. Sie können den Passwortschutz außerdem wahlweise für einzelne Benutzer oder für ganze Benutzergruppen einrichten.
Auch Kombinationen beider Formen sind möglich.
.htaccess-Datei/wiki/Webserver/htaccess/Passwortschutz#.htaccess-Datei[Bearbeiten]
Damit der Verzeichnisschutz mit Passwort funktioniert, genügt die .htaccess-Datei alleine allerdings nicht. Sie brauchen zusätzlich
eine Datei, in der die Benutzernamen und die zugehörigen Passwörter stehen. Falls Sie mit Benutzergruppen arbeiten, benötigen
Sie außerdem noch eine Datei, in der die Benutzergruppen definiert werden.
Benutzerdatei/wiki/Webserver/htaccess/Passwortschutz#Benutzerdatei[Bearbeiten]
Im obigen Beispiel werden die drei Benutzer Werner, Dieter, Heidi sowie alle Benutzer der Gruppe Servicetechniker angegeben.
Damit der Passwortschutz funktioniert, müssen nun die angegebenen Dateien mit den Benutzernamen und (falls benötigt) den
Gruppen angelegt werden:
.htusers-Datei
# BenutzerDatei für Web-Projekt
Werner:$2y$05$MQ7RdCCRrKmBEDD/u4pks.9qAV8RCKy4YCP2pzgmc4lppfli41zC
Dieter:{SHA}i8xKRW2XJbkGN4UbpkXBfVjSKXs=
Heidi:$apr1$.P2k7JQX$dBcOPzzpEcQYcR0ZGw24Q0
Jede Zeile der Benutzerdatei enthält einen Benutzernamen, und gleich dahinter, durch einen Doppelpunkt getrennt, das "gehashte"
(eine Art "Einwegverschlüsselung") Passwort.
Der erste Eintrag (Werner) wurde - das setzt einen Apache 2.4 voraus - mit dem Befehl htpasswd -B .htusers Werner
erzeugt. Als Passwort wurde "hallo" verwendet.
Der zweite Eintrag (Dieter) wurde - das setzt einen Apache 2.0 voraus - mit dem Befehl htpasswd -s .htusers Dieter
erzeugt. Als Passwort wurde "hallo" verwendet.
Der dritte Eintrag (Heidi) wurde - mit htpasswd .htuser Heidi erzeugt. Als Passwort wurde "hallo" verwendet.
Beachten Sie: Die dritte (es handelt sich um den veralteten MD5-Algorithmus mit einem zusätzlichen 32-Bit-Salt) und die zweite
Methode (sha1, ohne Salt) gelten beide als unsicher, wobei sha1 die schlechteste der vorgestellten Varianten ist! Wenn Sie mehr
über die Hashfunktionen wissen wollen, dann lesen Sie in der Dokumentation des Apache 2.4. oder Apache 2.2. nach. Wenn die
Passwörter durch ein PHP-Skript (ab PHP 5.5!) erzeugt werden sollen, dann sehen Sie sich die Funktion password_hash und das
Manual an.
Gruppendatei/wiki/Webserver/htaccess/Passwortschutz#Gruppendatei[Bearbeiten]
Gruppendateien bestehen aus Einträgen, bei denen zunächst ein Gruppenname notiert wird und dahinter, nach einem Doppelpunkt,
die Namen von Benutzern, die zu dieser Gruppe gehören. Es müssen Benutzernamen sein, für die in der Benutzerdatei ein Eintrag
angelegt wurde.
.htgroups-Datei
Die Gruppendatei wird im Beispiel nur benötigt, weil in der .htaccess-Datei mit authGroupFile eine Benutzergruppe angegeben
wurde; die Gruppendatei wird ausschließlich dann erforderlich, wenn Sie Gruppennamen benutzen. In einem Intranet ist auch eine
Benutzerdatei nicht zwingend erforderlich, da Sie Zugriffserlaubnisse und -verbote über die Zulassung bzw. den Ausschluss der
internen IP-Adresse regeln können.
Effekt:
Alle Besucher des Web-Projekts, die nun versuchen, auf das Verzeichnis mit der .htaccess-Datei zuzugreifen, bekommen von ihrem
Browser einen Dialog angeboten, in dem sie Benutzernamen und Passwort eingeben müssen. Nur Besucher, die sich mit einer
gültigen Kombination aus Benutzernamen und Passwort anmelden, haben Zugriff auf das Verzeichnis.
So wie im obigen Beispiel gezeigt, gilt der Zugangsschutz für das Verzeichnis, in dem die .htaccess-Datei liegt, und für alle
Verzeichnisse unterhalb davon. Sie können den Schutz aber auch auf bestimmte Dateien, Dateitypen oder Zugriffsmethoden
einschränken.
AuthType Basic
AuthName "Service-Bereich"
AuthUserFile /usr/verwaltung/web/.htusers
AuthGroupFile /usr/verwaltung/web/.htgroups
<Files *.htm>
Require user Werner Dieter Heidi
Require group Servicetechniker
</Files>
Um den Schutz einzuschränken, benutzen Sie ähnlich wie in HTML oder XML Tags mit spitzen Klammern. Im einleitenden Tag
kann hinter der öffnenden spitzen Klammer entweder Files stehen, wie im obigen Beispiel. Dahinter können Sie genau eine
einschränkende Angabe machen. Mit *.htm wie im Beispiel beschränken Sie den Schutz auf HTML-Dateien. Mit einer Angabe wie
geheim.htm würde nur diese eine Datei geschützt. Anstelle von Files können Sie auch FilesMatch einsetzen. Dann sind Reguläre
Ausdrücke möglich. Beispielsweise würden Sie mit <FilesMatch "\.(htm|php)$"> alle HTML-Dokumente und alle PHP-Scripts
erfassen.
Eine weitere Möglichkeit besteht darin, anstelle von Files die Anweisung Limit, oder besser noch LimitExcept anzuwenden. Sie
hat Auswirkungen auf HTTP-Methoden wie GET, POST, PUT, DELETE, CONNECT, OPTIONS usw. Mit <LimitExcept GET>
können Sie für alle Zugriffsmethoden Bedingungen formulieren, mit Ausnahme von GET - und mit Mit <LimitExcept POST>
würden Sie für alle Zugriffsmethoden mit Ausnahme von POST Zugriffsbedingungen formulieren können.
Beachten Sie: Falls es bei Ihnen einfach nicht mit dem Schützen von Verzeichnissen klappen will, dann könnte der Grund darin
liegen, dass in der zentralen Konfiguration des Apache Webservers beim Eintrag AllowOverride der Wert None gewählt wurde.
Fazit/wiki/Webserver/htaccess/Passwortschutz#Fazit[Bearbeiten]
Schutzmechanismen, die Sie mit Hilfe von .htaccess-Dateien erstellen, sind auf HTTP-Ebene wesentlich sicherer als solche, die mit
Hilfe von CGI-Scripts oder gar mit Hilfe von JavaScript erstellt werden. Dennoch sollten Sie beachten, dass .htaccess keinen
Generalschutz bietet. Der Schutz gilt nur, wenn Web-Browser oder andere Web-Clients über den Webserver geschützte Daten
anfordern. Er gilt nicht, wenn der Zugriff z.B. mit einem anderen Internet-Protokoll wie FTP erfolgt.
Problematisch ist bei diesem, HTTP-Authentication genannten Verfahren allerdings, dass es keine standardisierte Methode zum
Ausloggen gibt. Der Browser speichert die Zugangsdaten bis zum Ende der Sitzung und vergisst sie erst, wenn das Programm
geschlossen wird. Mittlerweile bieten alle gängigen Browser an, die Zugangsdaten dauerhaft zu speichern, was die Problematik mit
dem Ausloggen nicht gerade vereinfacht.