Zugriffssteuerung des Webservers mittels einer htaccess-Datei


In diesem Beitrag geht es darum, wie man seinen Homepage-Speicherplatz vom Provider an seine eigenen Bedürfnisse anpassen kann, z.B. welche php-Version verwendet werden soll oder ob bestimmte Verzeichnisse gegen einen Zugriff von außen geschützt sein sollen. Dies geschieht bei einem Apache-Webserver mittels einer sogenannten .htaccess Datei. .htaccess-Dateien sind Server-Konfigurationsdateien für Verzeichnisse auf dem Webspace. Der Punkt vor der Datei sagt, daß es sich dabei um eine versteckte Datei handelt.

Vorab noch zwei Hinweise: Betreibt man einen eigenen Apache-Webserver auf dem lokalen Rechner muß man die Verwendung von htaccess-Dateien erst aktivieren, denn standardmäßig nach der Installation ist der Server so konfiguriert, daß er selbige ignoriert. Unter Debian ändert man in der Datei /etc/apache2/sites-available/default folgende Einstellung:

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

Anschließend startet man den Server mit /etc/init.d/apache2 restart neu. Sollte da eine Meldung auftauchen, daß der Domain-Name nicht sicher bestimmt werden konnte, kann man selbigen in der Datei /etc/apache2/httpd.conf mittels ServerName localhost eintragen. Bei einem anschließendem Neustart des Servers ist die Meldung verschwunden.
Und noch ein Hinweis für Joomla: Joomla benötigt Schreibrechte im Apache-Verzeichnis /var/www wenn man z.B. Templates bearbeitet. Der Standard-User und die Standard-Gruppe für Apache ist www-data, daher sollten alle Dateien auf dem Webspace diesem User und der Gruppe mittels chown -R www-data:www-data zugeordnet werden.

PHP-Version anzeigen lassen

Welche php-Version standardmäßig auf dem Webspace verwendet wird, kann man sich mittels einer Webseite anzeigen lassen. Welchen Namen das html/php Dokument hat, spielt keine Rolle, da man es sowieso über die url (z.B., http://localhost/test.php) im Browser aufrufen muß. Die Datei muß den php-Befehl

<?php
phpinfo();
?>
enthalten. Bei einem Aufruf wird die verwendete php-Version, sowie die Umgebungsvariabeln und Einstellungen angezeigt.
Ein Hinweis: wird durch den Aufruf der Seite das Download-Fenster aufgerufen, anstatt der php-Versions-Seite, ist php nicht installiert und man sollte das unter Debian mittels
# apt-get install php5
nachholen.

PHP-Version auswählen

Beim Aufruf unserer Testseite kann es nun vorkommen, daß dort eine veraltete php-Version wie z.B. PHP Version 4 angezeigt wird. Manche Provider wie z.B. 1und1 bieten alle PHP-Versionen an, also 4, 5 und 6 und überlassen es dem Anwender selbst, welche php-Version er verwenden will. Dafür gibt es zwei Möglichkeiten. Entweder benennt man alle seine html/php-Dokumente mit der entsprechenden Endung, z.B. .php5 für PHP Version 5, oder man stellt die Verwendung global für alle Dateien mit der Endung .php mittels der .htaccess-Datei ein. Dazu legt man die .htaccess-Datei im root-Verzeichnis an. Für z.B. php5 muß sie folgenden Inhalt haben:

AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

Die in der .htaccess enthaltenen Informationen vererben sich in alle Unterverzeichnisse. Bei 1und1 ist das mittlerweile nicht mehr nötig, da man die gewünschte PHP-Version im Control-Center einstellen kann. Siehe hierzu auch: http://hilfe-center.1und1.de/

Zugriffs-Einstellungen

Mittels der .htaccess-Datei ist es auch möglich, den Zugriff auf bestimmte Verzeichnisse zu verwehren oder diese mit einem Paßwort zu versehen, so daß nur authorisierte Benutzer Zugang zu diesem Verzeichnis erlangen. Für eine komplette Sperrung legt man in dem betreffendem Verzeichnis die htaccess-Datei mit folgendem Inhalt an:

deny from all
Zusätzlich könnte man noch eine index.php anlegen mit dem Hinweis
<h1> Access denied </h1>, welche dann bei einem Zugriff auf das Verzeichnis angezeigt wird.
Für einen Paßwort-Schutz sieht die htaccess-Datei z.B. so aus:
# .htaccess-Datei für Benutzer-Authentifizierung
AuthType Basic
AuthName "Mein PC"
AuthUserFile /var/www/verzeichnis/.htpasswd
Require user udo
Für eine korrekte Authentifizierungs-Datei benötigt man mindestens vier Angaben: AuthType, AuthName, AuthUserFile und eine Require Anweisung. Die zweite Zeile definiert die Authentifizierungs-Type. Bei Basic werden die Authentifizierungs-Daten unverschlüsselt übertragen, was natürlich eine unsichere Methode darstellt. Leider wird die Alternative Digest, welches Paßwörter verschlüsselt überträgt, nicht von allen Browsern unterstützt, daher bleibt oftmals nur Basic.
AuthUserFile legt das Passwort-File für die Authentifizierung fest. Der Pfad zum File sollte eine absolute Angabe sein, was aber in den meisten Fällen nicht zu realisieren ist, da man auf andere Verzeichnisse als sein eigenes beim Webhosting-Provider keinen Zugriff hat. Genau aus diesem Grund kann man auch nicht die sicherere Methode wählen und die Passwort-Datei in einem anderem Verzeichnis als dem eigenem Webspace speichern.
Require user legt nun die Benutzer fest, welche sich authentifizieren können. Diese müssen nun auch in der Datei .htpasswd eingetragen werden. Unter Debian gibt es dafür den Befehl htpasswd, welcher die Eintragung automatisch erledigt. Mittels
# htpasswd -c .htpasswd udo
wird die Datei .htpasswd angelegt und nach dem Passwort für den User udo gefragt. Selbiges wird dann verschlüsselt in der Datei hinterlegt.

Einstellungen für PHP mittels php.ini

Möchte man Einstellungen für PHP vornehmen, legt man dazu in dem Verzeichnis in dem sich das betreffende php-Skript befindet die Datei php.ini an. In selbige kann man z.B. Variablen definieren, wie z.B.:

register_globals = off
allow_url_fopen = off
upload_max_filesize = 100M
post_max_size = 100M
Abschließend ein Hinweis: Die Einstellungen der php.ini vererben sich nicht in die Unterverzeichnisse, sondern müssen für jedes Verzeichnis separat erstellt werden.