.htaccess und .htpasswd
Dieses Tutorial soll einem dem Umgang mit der .htaccess und der .htpasswd zeigen. Die Dokumentation zeigt an einem praktischen Beispiel, wie man ein Verzeichnis über die httpd.conf oder mit der .htaccess schützt.
Ich war vor die Aufgabe gestellt unseren LAMP in der Firma in bestimmten Bereichen zu schützen. Dieses hätte ich mit PHP machen können (siehe dazu PHP-Authentifizierung), aber ich sah keine Möglichkeit, wie ich ganze Verzeichnisstrukturen mit Unterverzeichnissen schützen könnte.
Ich machte mich daran, mein Verzeichnis mit .htaccess zu schützen, aber was ich auch tat, es funktionierte nicht so wie in der Doku. Aber ich fand heraus, das ich Verzeichnisse auch über die httpd.conf schützen konnte:
# First, we configure the "default" to be a very restrictive set of # permissions. # <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory "usr/local/apch-php/htdocs/phpMyAdmin"> AuthType Basic AuthName phpMyAdmin AuthUserFile /usr/local/apache/access_denied require valid-user </Directory>
Man beachte, dass die Passwortdatei access_denied nicht übers Web erreichbar ist, da sie außerhalb von htdocs liegt. Diese Variante funktioniert natürlich nur bei einem eigenen WebServer. Schreibenden Zugriff wird ein WebSpace-Provider wohl kaum zulassen.
Änderungen in der "httpd.conf"
Es müssen einige Direktiven in der httpd.conf geändert werden, um die Dateien .htaccess und .htpasswd zu nutzen. Folgende Einstellungen sind in der httpd.conf notwendig:
# AccessFileName: The name of the file to look for in each directory # for access control information. # AccessFileName .htaccess
Wie die Dokumentation der httpd.conf schon sagt, schaut der Apache in jedem Verzeichnis nach, ob er eine .htaccess findet, die er auswerten kann. Damit meine auf meinem WebServer aber überhaupt auswertbar war, musste ich noch die AllowOverride Einstellungen ändern.
# This controls which options the .htaccess files in directories can # override. Can also be "All", or any combination of "Options", # "FileInfo", "AuthConfig", and "Limit" # AllowOverride All
AllowOverride steht standardmäßig auf none. Verwirrend für mich war, dass die Dokumentation von OReilly aussagt, diese Einstellung wäre richtig. Aber erst als ich den Parameter auf All stellte, wurde meine .htaccess wirklich berücksichtigt.
Die Dateien ".htaccess" und ".htpasswd"
Das folgende Beispiel zeigt die Erstellung und Benutzung der beiden Dateien.
Lassen Sie uns annehmen, dass wir das Verzeichnis /usr/local/apache/htdocs/auth/
schützen wollen, dann muss die Datei .htaccess wie folgt konfiguriert
sein:
AuthType Basic AuthName "Verzeichnis CVB" AuthUserFile /usr/local/apache/.htpasswd require valid-userDie .htaccess Datei schützt das Verzeichnis in das sie kopiert wurde. Ein Besucher, der die WebSeite <URL:http://LAMP/auth/> auruft, muss sich erst authorisieren, bevor er den Inhalt der Seite angezeigt bekommt.
Der Schutz betrifft auch alle Unterverzeichnisse. Also würde ein Aufruf von <URL:http://LAMP/auth/unterverz/> dasselbe Fenster zur Authorisierung hervorrufen, es sei denn, ~/auth/unterverz hat eine eigene .htaccess Datei.
Die Datei fängt mit AuthType Basic an. Diese Zeile schützt die WebSeite und ist somit der Kern der ganzen Datei.
Wie Sie am Screenshot sehen können, ist der AuthName die Bezeichnung für die Sektion, in der Sie sich authorisieren müssen. Bereich und AuthName sind also identisch.
Die Angabe AuthUserFile sagt dem Webserver wo er die Datei mit den Benutzernamen/Passwörtern finden kann. Diese Datei wird in der Regel .htpasswd genannt, kann aber auch jeden anderen Namen haben. Die Erklärung, wie die Datei generiert wird, folgt weiter unten.
Benutzen Sie einen Texteditor, um eine Datei zu erzeugen, die auf ihre Pfade angepasst ist. Hier müssen die Einträge AuthUserFile und AuthName durch Ihre eigenen Werte ersetzt werden. Stellen Sie sicher, dass die Datei als .htaccess gespeichert wird.
Bleibt die Frage: Wie spezifizieren wir die Benutzernamen + Passwörter für die Benutzer, die auf die Webseite zugreifen sollen? Wir erstellen die Datei .htpasswd die in dem Verzeichnis, das unter AuthUserFile angegeben wurde. Dazu müssen Sie in das Verzeichnis wechseln (cd /usr/local/apache).
Dann benutzen Sie das Programm htpasswd mit dem Schalter -c, um die Datei .htpasswd im aktuellen Verzeichnis zu erstellen.
Tippen Sie htpasswd -c .htpasswd schmitz um die Datei zu erstellen und "schmitz" als ersten User festzulegen. Sie werden zweimal nach dem Passwort gefragt, um sicherzustellen, dass es nicht zu Tippfehlern kommt. Sie werden das Passwort nicht sehen, während Sie es eingeben.
LAMP:/usr/local/apache # htpasswd -c .htpasswd username Adding password for username New password: Re-type new password:
Um in Zukunft noch mehr Benutzer einzurichten, benutzen Sie denselben Befehl nur ohne -c Schalter, also würde htpasswd .htpasswd admin den Benutzer "admin" in ihre .htpasswd einfügen.
Die Passwörter in der erzeugten Datei sind verschlüsselt.