Es ist bei vielen Providern möglich, die Zugriffsrechte auf Verzeichnisse zu ändern. Ich denke dabei weniger an die Änderung der Rechte der Dateien/Verzeichnisse per FTP als mehr die Manipulierung der Zugriffsrechte, die Webserver (insbesondere Apache) unterstützen.
Da die Abfrage von einem Browser kommt, kann man (logischerweise) sowieso nicht mit den eigentlichen Zugriffsrechten der Dateien/Verzeichnisse arbeiten.
Daher soll es bei diesem kleinen HowTo darum gehen, wie man beim Apache Zugriffsrechte verteilt bzw. Verzeichnisse per Passwortabfrage schützen kann. Um dies zu erreichen, benötigt man lediglich zwei Dateien: Die .htaccess
und die .htpasswd
.
Die .htaccess
regelt den Zugriff (»access« ist Englisch für »Zugriff« ) auf das Verzeichnis. In der .htpasswd
befindet sich das eigentliche Passwort als Prüfsumme und der dazugehörige Benutzername. Beide Dateien sind reine ASCII-Textdateien und können eigentlich sehr einfach erstellt werden.
Sollte man einen eigenen Webserver aufgesetzt haben, funktioniert die ganze Geschichte mit den beiden Dateien eventuell nicht. Grund dafür ist ein Parameter in der Konfigurationsdatei des Apache, der httpd.conf
.
Zunächst sollte man also kontrollieren, wie dieser Parameter angegeben worden ist. Dazu die httpd.conf
im Unterverzeichnis /conf
der Apache-Installation öffnen. Ich beziehe mich bei dieser Anleitung voll und ganz auf eine Windowsinstallation des Apache, unter Linux verhält es sich aber ähnlich.
In der Konfigurationsdatei befindet sich ein Block der wiefolgt aussehen wird:
# 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 None
Der Wert None bedeutet, dass keine Angaben in einer .htaccess
-Datei interpretiert werden. Somit wäre aber auch kein Passwortschutz möglich. Daher muß die Zeile auf folgende geändert werden:
AllowOverride All
Nach einem Neustart des Apache sollte nun jede .htaccess
interpretiert werden – sofern sie gültige Einträge enthält.
Hier ein Beispiel für den Aufbau einer .htaccess
:
AuthType Basic AuthName "Autorisierung erforderlich" require valid-user AuthUserFile /verzeichnis/unterverzeichnis/.htpasswd
Wichtig sind vorallem die zweite und vierte Zeile:
Mit AuthName "Autorisierung erforderlich" wird die Bezeichnung der Dialogbox angegeben.
In der vierten Zeile befindet sich der Pfad zur .htpasswd Datei, in welcher die zulässigen Usernamen und Passwörter gespeichert werden. Achtung: der Pfad von AuthUserFile
bezieht sich nicht auf die Root vom Webspace sondern auf die Umgebungsvariable DOCUMENT_ROOT
des Servers.
Den Wert der Variablen kann man aber sehr einfach herausfinden: Einfach eine kleine PHP-Datei schreiben und dort dann die Funktion phpinfo()
aufrufen. Dann nach dem Wert der Variablen DOCUMENT_ROOT
suchen und den Pfad zur .htpasswd
hinzufügen – fertig.
Die .htaccess
erstellt man am einfachsten mit einem einfachen Texteditor, beispielsweise dem bei Windows enthaltenen »Notepad«. Es genügt, wenn die Datei zunächst htaccess.txt
gennant wird. Umbenennen kann man sie auch noch später.
Hat man lokal einen Webserver eingerichtet (beispielsweise eben einen WAMP), kann die Datei direkt in das zu schützende Verzeichnis gespeichert werden. Will man ein Verzeichnis auf einem fremden Server schützen, muß man die Datei per FTP auf diesen Server hochladen.
Im Falle, dass man die Datei per FTP auf den Server überträgt, muß die Übertragung im ASCII-Modus erfolgen. Auf dem Server benennt man die Datei anschließend zu .htaccess
um.
Achtung: Der Punkt als erstes Zeichen der Datei ist wichtig, ebenso die Kleinschreibung. Die Datei darf keine Datei-Endung (beispielsweise ».txt« haben).
Und gleich nochmal Achtung: Immer sichergehen, dass die .htaccess
einen Zeilenumbruch nach der letzten Zeile hat. Ansonsten kommt es zu Fehlern bzw. die letzte Zeile der Datei wird nicht verarbeitet.
Wie oben schon erwähnt befinden sich in der Datei .htpasswd
die Informationen der zulässigen User und deren Passwörter. Die Passwörter werden nicht im Klartext (plain text) gespeichert, sondern als Prüfsumme.
Prüfsumme bedeutet, dass vom eigentlichen Passwort ein Wert »errechnet« wird. Wird per Browser ein Passwort verschickt, wandelt der Webserver diese Zeichenkette in eine Prüfsumme um und vergleicht diese mit der in der .htpasswd
abgespeicherten Prüfsumme.
Jetzt fragt sich eventuell jemand, warum man eine Prüfsumme verwendet und keine »richtige« Verschlüsselung. Die Antwort ist denkbar einfach: Die Erstellung einer Prüfsumme kann man auch als »Einweg-Verschlüsselung« bezeichnen. Dies bedeutet, dass eine Zeichenkette zwar verschlüsselt wird, aber nicht wieder entschlüsselt werden kann. Somit kann niemand per Download/Diebstahl (wie auch immer) der .htpasswd an die Passwörter von Usern kommen.
Im nächsten Abschnitt wird das Erzeugen der .htpasswd berschrieben – inklusive der Passwortverschlüsselung.
Wie bekommt man jetzt das »verschlüsselte« Passwort? Sowohl unter Linux als auch unter Windows befindet sich nach der Standardinstallation des Apache ein Programm mit dem Namen htpasswd
auf dem Rechner. Nein, ich habe mich nicht verschrieben. Das Programm hat keinen führenden Punkt. Diesen hat nur die Datei, welche die Passwörter beinhaltet.
Unter Linux befindet sich das Programm in /usr/bin
, unter Windows befindet es sich im Unterverzeichnis /bin
der Apache-Installation.
Die Verschlüsselung unter Linux wird mit dem Crypt-Verfahren vollzogen, unter Windows wird das MD5-Verfahren verwendet. Zunächst mal die Standardaufrufe für Linux bzw. Windows. Anschließend noch der Hinweis, wie man unter Windows mit dem Crypt-Verfahren das Passwort als Prüfsumme abspeichert.
Die Syntax des Aufrufs für das Programm ist sowohl unter Linux als auch unter Windows identisch und lautet htpasswd -c dateiname benutzername
. Ein Beispiel hierfür (Username: »foo«):
htpasswd -c .htpasswd foo
Nach dem Aufruf wird man zur Eingabe eines Passwortes aufgefordert. Nachdem man dies eingegeben und bestätigt hat muß man zur Verifizierung das gleiche Passwort erneut eingeben. Anschließend wurde die Datei gespeichert und beinhaltet die Prüfsumme des Passworts. Hier ein Beispiel mit dem User »foo« welcher als Passwort »bar« verwendet:
Linux:
foo:CONTENT$XmtbsrsR$KLP1q4vjeXGB2kbz8Lq6i1
Windows:
foo:$apr1$tj4.....CONTENTWJGHjNpg/AbmWBM3qQfs.
Ein User wäre somit inklusive Passwort angelegt. Man kann die unterschiedlichen Ergebnisse bei der Berechnung der Prüfsumme sehen. Man kann aber auch unter Windows mit dem Crypt-Verfahren arbeiten. Der Aufruf würde dann folgendermaßen lauten:
htpasswd -c -d .htpasswd foo
Will man nun weitere User hinzufügen, beispielsweise wenn mehrere unterschiedliche User mit unterschiedlichen Passwörtern auf das Verzeichnis zugreifen sollen, so lautet der Aufruf
htpasswd dateiname benutzername
Das »-c« (»create«) wird weggelassen, da sonst die vorhandene Datei gelöscht bzw. überschrieben würde.
Es spricht prinzipiell nichts dagegen, mehr als eine Passwortdatei zu verwenden. Es muß einfach nur der Pfad in der .htaccess
im geweiligen Verzeichnis angepasst werden.
Eine zentral gespeicherte Passwortdatei hat aber auch Vorteile: Es braucht nur eine Datei gepflegt zu werden, der Administrationsaufwand verringert sich. Zudem kann es keine »alten« und »neuen« Passwörter für den gleichen User geben.
Es erhalten nicht zwangsläufig alle angelegten User der Passwortdatei Zugriff auf per .htaccess
geschützte Verzeichnisse auf dem Server. Die zulässigen User können bzw. sollten in der jeweiligen .htaccess
mit angegegeben werden. Hierfür wird die Zeile require valid-user
durch die folgende ersetzt:
require user [Benutzername]
Es können beliebig viele Benutzernamen (durch ein Leerzeichen getrennt) hintereinander angegeben werden.
Zur Erklärung: Die Angabe require valid-user
erlaubt allen (!) Usern, welche in der angegebenen .htpasswd
eingetragen sind den Zugriff auf das Verzeichnis – sofern sie das richtige Passwort eingeben. Mit require user
werden nur bestimmte User (eben nur die aufgeführten) für das Verzeichnis zugelassen.
Manche FTP-Server sind so konfiguriert, dass Dateien und Verzeichnisse mit einem führenden Punkt nicht angezeigt werden. Sie befinden sich dennoch auf dem Server, werden nur nicht angezeigt. Weiterhin kann es auch am FTP-Client liegen. Ist dieser so konfiguriert, dass er die Verzeichnisse/Dateien nicht anzeigen soll – na, dann macht er das auch so.
Sollten die Dateien nicht angezeigt werden, kann man sie dennoch überschreiben. Man kann sie auch per FTP-Befehl löschen. Es bietet sich jedoch an, die Dateien einfach überschreiben zu lassen.
Jeder, der Zugriffsrechte auf die Verzeichnisse erhält, kann sich natürlich auch die .htaccess anzeigen lassen. Ob er damit was anfangen kann ist fraglich, aber möglich ist's auf alle Fälle. Dies läßt sich in der Konfigurationsdatei des Apache unterbinden. Eigentlich ist es sogar standardmäßig so vorgesehen. Wurden die Zeilen versehentlich gelöscht oder auskommentiert kann man einfach diesen (originalen) Block wieder einfügen:
# The following lines prevent .htaccess files from being viewed by # Web clients. Since .htaccess files often contain authorization # information, access is disallowed for security reasons. Comment # these lines out if you want Web visitors to see the contents of # .htaccess files. If you change the AccessFileName directive above, # be sure to make the corresponding changes here. # # Also, folks tend to use names such as .htpasswd for password # files, so this will protect those as well. # <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>
Damit alles komplett ist, habe ich den originalen Erklärungstext mit den eigentlich entscheidenen fünf Zeilen kopiert. Die Angaben bewirken, dass der direkte Zugriff auf alle Dateien mit dem Anfang ».ht« per HTTP unmöglich ist. Der Apache unterbindet diesen Zugriff.
Natürlich muß nach dem Einfügen der Zeilen der Apache neu gestartet werden. Ansonsten haben die Änderungen der Konfigurationsdatei keine Wirkung.