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.
