Rechtekontrolle mit .htaccess

Die Konfiguration eines Webservers umfasst die Freigabe von Verzeichnissen, Zugriffsrechte, Fehlermeldungen und Umleitungen.

Das Directory Tag enthält die Admin- und Serveradresse, das freizugebene Verzeichnis DocumentRoot, einen Parameter für das Verzeichnislisting, allgemeine Zugriffsrechte und eine Möglichkeit die bestehende Konfiguration mit .htaccess Dateien zu überschreiben.

# /etc/apache2/apache2.conf
...
<VirtualHost *:80>
        ServerName localhost
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        
        <Directory /var/www/html>
            Options Indexes
            Require all granted
            AllowOverride all
        </Directory>
</VirtualHost>
...

Eine .htaccess Datei ist eine einfache Textdatei, die in jedem der freigegebenen Verzeichnisse erstellt werden kann, um dort die Konfiguration des Webservers anzupassen. Im Beispiel sollen die Unterverzeichnisse private und secret vor einem unerlaubtem Zugriff geschützt werden.

von
www
└── html
    ├── common
    │   └── news.o
    ├── private
    │   ├── .htaccess
    │   └── photos.o
    └── secret
        ├── .htaccess
        └── password.o

Damit Unterverzeichnisse des DocumentRoot individuell konfiguriert und geschützt werden müsste je ein weiterer Directory Eintrag in der Konfigurationsdatei des Webservers erstellt werden. Die .htaccess Dateien stellen hierzu eine komfortable Alternative dar.

Eine .htaccess Datei muss für die Absicherung eines Verzeichnis Angaben zum Authentifizierungsverfahren, der verwendeten Passwortdatei AuthUserFile und den erlaubten Nutzern enthalten.

# /var/www/html/private/.htaccess
AuthType Basic
AuthUserFile /etc/apache2/accounts
Require valid-user

Die .htaccess Datei im Verzeichnis private bewirkt mit dem Kommando Require valid-user, dass alle Nutzer mit einem gültigen Passwort Zugang bekommen.

# /var/www/html/secret/.htaccess
AuthType Basic
AuthUserFile /etc/apache2/accounts
Require user user1

Hingegen bewirkt die .htaccess Datei im Verzeichnis secret mit Require user user1, dass nur Nutzer user1 Zugang hat.

Die bei einem Zugriff auf das Verzeichnis verwendete Passwortdatei accounts sollte aus Sicherheitsgründen in einem nicht öffentlichen Verzeichnis abgelegt werden. Erstellt wird eine Passwortdatei mit dem Programm htpasswd.

htpasswd -c /etc/apache2/accounts user1
htpasswd /etc/apache2/accounts user2

Htpasswd benötigt den Parameter -c wenn noch keine Passwortdatei existiert sowie einen Dateipfad und den Namen des Nutzers.

Bei einem Aufruf der Seite wird Zugang dann nur noch nach erfolgreicher Authentifizierung gewährt.

 Zugriff auf mit .htaccess-Datei passwortgeschützter Ordner