Verzeichnisschutz per .htaccess

In diesem Artikel wird erklärt, wie man ein bestimmtes Webverzeichnis (der Serverpfad ist in diesem Beispiel /home/dros/public_html/foobar) durch eine HTTP-Basis-Authentifizierung schützen kann. Die Voraussetzung ist dabei ein bereits laufender  Apache HTTP-Server.

Was ist .htaccess?

Wikipedia schreibt [ganzer Artikel  hier]:

".htaccess (engl. Hypertext Access – „Hypertext-Zugriff“) ist eine Konfigurationsdatei, in der verzeichnisspezifische Einstellungen auf NCSA-kompatiblen Webservern (z. B. Apache) vorgenommen werden können. Beispielsweise lässt sich dort ein Zugriffsschutz für ein Verzeichnis oder einzelne Dateien einrichten. Aber auch Fehlerseiten oder interne Verknüpfungen („Rewrite Rules“) lassen sich hierüber einstellen, ohne den Server neustarten zu müssen: Änderungen in der .htaccess-Datei treten sofort in Kraft. In diesen Dateien vorgenommene Einstellungen gelten im Gegensatz zu zentralen Konfigurationsdateien (z. B. httpd.conf) nur für das Verzeichnis, in dem sie gespeichert sind, sowie allen Unterverzeichnissen /!\ . Sie können in den Unterverzeichnissen jedoch wieder überschrieben werden."

Serverkonfiguration anpassen

Die Konfigurationsdatei ist je nach Distribution an verschiedener Stelle zu finden. Unter Debain zum Beispiel ist der Pfad:

/etc/apache2/apache2.conf

Die apache2.conf muss um folgenden Einträge erweitert werden, damit der Server die htaccess-Konfiguration akzeptiert:

#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.
# See also the AllowOverride directive.
#

AccessFileName .htaccess

#
# The following lines prevent .htaccess and .htpasswd files from being 
# viewed by Web clients. 
#
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

Diese Änderungen erfordern einen Neustart des Apache-Servers:

# /etc/init.d/apache2 force-reload

Einrichtung für seinen Ordner

.htaccess im Ordner erstellen

In dem zu schützenden Ordner /home/dros/public_html/foobar wird eine Textdatei names .htaccess erstellt

dros@ngopi:~/public_html/foobar$  vim .htaccess

und mit folgendem Inhalt gefüllt:

AuthType Basic
AuthName "Geschuetzer Bereich"
AuthUserFile /home/dros/.htpasswd
require valid-user

Als AuthType wird hier Basic verwendet, die Standard HTTP-Authentifikation und AuthName gibt den Titel des Logins an.

Der Parameter AuthUserFile gibt die Datei mit den User- und Passwortangaben an. Soll das File im Userspace wie hier im Homeroot liegen, so muss der Pfad absolut angegeben werden. Bei relativen Pfadangaben, ist der Ausgangspfad /etc/apache2/. Wird das .htpasswd-File nicht gefunden, kommt es zu einem 500 - Internal Server Error.

.htpasswd erstellen

Die .htpasswd speichert alle Benutzer und Kennwörter, die Zutritt zu dem Verzeichnis bekommen sollen. Dazu benötigt man das Programm htpasswd welches bei Linux standardmäßig installiert ist. Es gibt viele Möglichkeiten .htpasswd zu erstellen und zu erweitern, welche unter anderem  hier zu finden sind. Hier soll nur die einfachste Möglichkeit erläutert werden. Dazu geht man in das Verzeichnis wo die .htpasswd-Datei erstellt werden soll und schreibt:

dros@ngopi:~$ htpasswd -c .htpasswd dros

Darauf wird man aufgefordert das Passwort einzugeben:

New password: 
Re-type new password: 
Adding password for user dros

Das Programm hat nun ein .htpasswd-File erstellt. Die Option -c sorgt dafür, dass ein neues File erstellt wird. Existiert die Datei bereits, kann der Eintrag ohne die Option -c aktualisiert werden. Der Username dros ist in diesem Beispiel durch einen beliebigen zu ersetzen.

Nun sollte das Webverzeichnis geschützt sein!

{i} Die .htpasswd sollte aus Sicherheitsgründen nicht in einem Webordner wie zum Beispiel dem public_html-Ordner liegen, auch wenn sie in der Regel von außen nicht gelesen werden kann.

Achtung Klartext

/!\ Allerdings sollte man sich bewusst sein, dass bei der Eingabe das Passwort im Klartext an die Server versendet wird. Jeder der Zugang zu einem Server hat, über den ein solches HTTP-Paket versendet wird, könnte das Passwort lesen. Sensible Daten sollten auf diese Weise also nicht geschützt werden! Mehr Sicherheit würde hier zum Beispiel eine zusätzliche SSL-Verschlüsselung bringen - was an dieser Stelle aber nicht erläutert werden soll.