Auf Webservern die mit Apache laufen ist es möglich soferne der Administrator dies in der Hauptkonfiguration gestattet einige Dinge selbst zu konfigurieren in dem eine Datei mit dem Namen ".htaccess" mit diversen Einstellungen angelegt wird welche gleichzeitig auch für alle Unterordner gilt soferne sich darin nicht eine eigene befindet welche die Werte überschreibt

Dieser Beitrag erhebt keinerlei Anspruch auf vollständigkeit da die Möglichkeiten nahezu unbegrenzt sind und am ausführlichsten in der leider nur englisch verfügbaren Dokumentation zum
 Apache aufgeführt sind welche auch als PDF-Datei heruntergeladen werden kann

  • Wie erstelle ich die Datei?
  • Benutzerdefinierte Fehlerseiten
  • Startdokumente festlegen
  • Auflisten von Ordnerinhalten
  • Ausführberechtigungen
  • Andere Endungen mit PHP / CGI
  • MIME-Types selbst zuweisen
  • Zeichensatz festlegen
  • Ordnerbrowsing konfigurieren
  • IP-Adressen sperren
  • Passwortschutz
  • Passwortschutz einschränken
  • Zugriffe mit dem Browser sperren

Wie erstelle ich die Datei?

Unter Windows ist es das grösste Problem eine solche Datei anzulegen da der Explorer dies verweigert weil es für ihn eine Dateiendung ohne Namen (Unter Linux durchaus üblich) ist wodurch man gezwungen wird eine leere Textdatei zu Erstellen und diese mit einem anderen Programm z.B. Windows Commander danach umzubenennen order mit einem Editor eines Fremdherstellers arbeitet


Benutzerdefinierte Fehlerseiten

Dies ist wohl einer der interessantesten Aspekte da es ganz einfach machbar ist anstelle der abschreckenden weissen "Seite nicht gefunden" Ausgabe eigene, optisch zur Seite passende Fehlerausgaben mit Grafiken und Links und allem was einem sonst noch einfällt ausgeben zu lassen

Wichtig in diesem Zusammenhang ist nur absolute Pfade für Links und Grafiken anzugeben also am besten mit einem / beginnend zum Server-Root damit das Ganze auch lokal funktioniert

ErrorDocument 404 /error_404.htm

Wie man am Beispiel sieht ist es damit möglich für die verschiedenen Fehlertypen eigene Seiten zu definieren oder man nutzt wenn verfügbar die Skriptsprache PHP wobei in diesem Zusammenhang wichtige Informationen in einem eigenen  PHP-Special zu finden sind

Wichtig ist in diesem Zusammenhang die Fehlernummer 401 (Nicht authorisiert) nicht umzuleiten da sonst die am Ende bschriebene Zugriffs-Sicherung nicht funktioniert wie ich bei der Erstellung dieses Artikels am eigenen Leib schmerzhaft feststellen musste !


Startdokumente festlegen

Normalerweise muss die Startseite index.htm bzw. index.php heissen und ist vom Server vorgegeben und damit auch die Reihenfolge sollte es beide geben was sich leicht den eigenen Bedürfnissen anpassen lässt

DirectoryIndex index.php index.htm index.wml


Auflisten von Ordnerinhalten verhindern

Gibt der Besucher nur einen Ordner innerhalb der Homepage ohne Datei an so erhält er eine Auflistung des Inhaltes was in vielen Fällen nicht erwünscht oder zumindest optisch nicht schön ist

Mit der folgenden Direktive wird dies untersagt und endet in einem "Zugriff verweigert" wobei hier das Minuszeichen ausschlaggebend ist, um dies für einzelne Unterordner trotzdem zu erlauben einfach dort eine eigene .htaccess plazieren und anstelle des Minus ein + verwenden

Options -Indexes


Ausführberechtigungen

In der Regel müssen Dateien wie PHP und CGI-Skripts auf vielen Servern in einem bestimmten Ordner liegen von dem sie ausgeführt werden können (meist /cgi-bin) was sich jedoch für den eigenen Bereich ändern lässt soferne dies durch den Betreiber ernöglicht wurde

Für CGI/PHP
Options +ExecCGI

Für Server-Side-Includes (SSI)
Options +IncludesNOEXEC


Andere Endungen mit PHP / CGI

Meist werden nur Dateien mit den Endungen php, php3 und phtml vom Interpreter berücksichtigt wobei es auch hier kein Problem ist dies selbst zu Ändern um z.B. auch normale HTML-Dateien zu parsen was aber die Homepage langsamer macht und den Server stärker belastet

AddType application/x-httpd-php .php .ini .txt .dat

Über die AddHandler-Direktve ist das selbe auch für CGI-Scripts wie im folgenden Beispiel für beliebige Endungen möglich

AddHandler cgi-script .cgi


MIME-Types zuweisen

MIME-Types dienen dazu dem Client mitzuteilen um was für eine Art Inhalt (Text, Binärdatei, Grafik ...) es sich beim empfangenen Dokument handelt damit dieser entsprechend reagieren kann

In diesem Beispiel werden den für WAP-Seiten üblichen Endungen die korrekten Inhaltstypen zugewiesen da sonst auch bei völlig korrektem Quellcode das Mobiltelefon nur eine hilflose Fehlermeldung ausgibt - Meiner bescheidenen Meinung nach eine Frechheit der Gerätehersteller aber bitte schön muss man sich wie so oft selber helfen

AddType text/vnd.wap.wml .wml .wap
AddType image/vnd.wap.wbmp .wbmp
AddType text/vnd.wap.wmlscript .wmls
AddType application/vnd.wap.wmlc .wmlc
AddType application/vnd.wap.wmlscriptc .wmlsc


Zeichensatz festlegen

Interessant vor allem im deutschen Raum da ansonsten entweder Umlaute von manchen Browsern falsch dargestellt werden oder in jeder Datei eine Meta-Angabe vorhanden sein sollte

AddLanguage de .htm .html .php .cgi
AddCharset ISO-8859-1 .htm .html .php .cgi


Ordnerbrowsing konfigurieren

Ist die Anzege von Ordnerinhalten erlaubt lässt sich die optisch weitgehend anpassen und Beschreibungen sowie Dateisymbole festlegen wobei dies durch die erste Zeile des Beispiels explizit aktiviert wird

IndexOptions FancyIndexing
AddDescription "HTML-Datei, anzeigbar" *.htm *.html
AddDescription "GIF-Grafik, anzeigbar" *.gif
AddDescription "ZIP-Archiv, downloadbar" *.zip
AddIcon /src/blau.gif html htm
AddIcon /src/gelb.gif gif jpg
AddIcon /src/gruen.gif ^^DIRECTORY^^

IndexIgnore kopf.htm fuss.htm

Legt fest das die angegebenen Dateien nicht angeziegt werden dürfen

SuppressColumnSorting aktiviert unsortierte Anzeige
SuppressDescription deaktivert Kurzbeschreibungen
SuppressLastModified deaktiviert Zeitstempel
SuppressSize deaktiviert Dateigrössen angezeigt

ReadmeName
Bestimmt eine Datei mit zusätzlichen Informationen undwird unterhalb der Verzeichnisliste eingebunden.


IP-Adressen ausschliessen

Bei Angeboten die nur über bestimmte PCs mit statischen IP-Adressen erreichbar sein sollen oder um User die sich nicht wie gewünscht verhalten haben auszuschliessen lässt sich dies ebenfalls für bestimmte Ordner oder die ganze Homepage realisieren

Hier ist die Reihenfolge (Order) wichtig um entweder alle bis auf bestimmte zu sperren oder alle zu sperren und nur gewissen Adressen den Zugriff zu erlauben wobei in der IP-Maske auch Teile also z.B. 192.168 für alle Adressen die so beginnen

Order deny,allow
Deny from .aol.com
Deny from 192.168
Allow from 192.168.220.102


Ordner mit Passwörtern schützen

Dieser relativ umfangreiche Abschnitt soll erläutern wie man bestimmte Ordner die nicht jeder User einsehen darf mit einem Passwort schützt um z.B. darin administrative Tools standortunabhängig zu installieren

Neben der ".htaccess" sind 2 weitere Dateien nötig um in einer die Gruppen welchen die einzelnen User zugehören zu definieren und in einer weiteren die Passwörter für die User selbst

Im Prinzip reicht es zwar auch nur eine Benutzerdatei zu verwenden und im folgenden alles was mit "group" in Zusammenhang steht wegzulassen wovon ich aber nur abraten kann da wenn viele Personen mit unterschiedlichen Rechten Zugriff auf mehrere Ordner erhalten sollen die Sache sehr unübersichtlich wird und sich nicht zentral verwalten lässt

Die Passwärter selbst müssen auf Unix/Linux-Servern verschlüsselt gespeichert werden wobei der Schlüssel am einfachsten über ein PHP-Skript mit Verwendung des Kommandos crypt() generiert werden kann

Dies funktioniert leider nur unter Unix da Crypt auf Windows anders arbeitet

Die Verschlüsselung selbst funktioniert nur in eine Richtung und kann daher nicht umgangen werden da der Server bei der Authentifizierung das eingegebene Passwort mit der gleichen Methode verschlüsselt und beide Zeichenfolgen abschliessend vergleicht

Wichtig ist hier dass innerhalb der ".htaccess" nur absolute Pfade zu den User- und Gruppendateien erlaubt sind also mit / beginnend vom Root-Ordner welcher nicht die Domain ist sondern der Unix-Pfad (Am besten beim Provider nachfragen) in meinem Fall /home/rhsoftware/www.rhsoft.net/

Zum leichteren Verständniss der folgenden Beispiele sollte einmal das Ziel bekannt sein nämlich kurz gesagt einen beliebigen Ordner nur Für die User "Franz" und "Peter" aus der Gruppe Service zugänglich zu machen

WINDOWS:

Unter Windows müssen die Passswörter unverschlüssselt gespeichert und ein absoluter unbedingt in Anführungszeichen eingeschlossener Pfad wie z.B. "G:homepagewww.rhsoft.net.htusers" verwendet werden !

Beispiel für die Einträge in der ".htaccess"

AuthType Basic
AuthName "Service-Bereich"
AuthUserFile /home/username/.htusers
AuthGroupFile /home/username/.htgroups
require user Franz Peter
require group Service

Beispiel für die User-Datei mit den Passwörtern

Admin:INUnlKdkNZ6RQ
Franz:INh6DHvyejvf2
Peter:INboWuvjjwQ7E
Karl:INwOXOz96UQOU

Beispiel für die Gruppendatei

Service: Franz Peter Karl
Administration: Admin

Aus den vorangegangenen Beispielen lässt sich zusammenfassend erkennen das primär einmal die ".htaccess" in dem zu schützenden Ordner liegen muss damit der Rest der Homepage auch weiterhin öffentlich verfügbar bleibt

Die Dateien ".htusers" und ".htgroups" werden am besten allgemein im Root-Ordner abgelegt, um wenn verschiedene Ordner mit unterschiedlichen Zugriffsrechten geplant sind die entsprechenden Gruppen und Benutzer zentral verwalten zu können und nur mehr in den gewünschten Ordner anzugeben ist welche User aus welchen Gruppen Zugriff erhalten sollen


Passwortschutz einschränken

Innerhalb der ".htaccess" kann auch eingegrenzt werden auf welche Dateien dieser Schutz anzuwenden ist damit z.B. direkte Links auf Grafiken nicht behindert und nur die sensiblen Daten selbst gesichert werden

Sollen verschiedene Endungen mit unterschiedlichen Rechten versehen werden ist für jede Endung wie im Beispiel ersichtlich ein eigener Files-Block notwendig und ohne Angabe von Usern bzw. der Bezeichnung "valid-user" können damit z.B. einzelne Dateitypen unabhängig vom User für die ganze Gruppe freigegeben werden

<Files *.php>
require user Franz Peter
require group Service
</Files>
<Files *.htm>
require group Service
</Files>

Unter Umständen kommt damit jedoch nicht jeder Server klar
Der Server hier auf Sprit.org erlaubte beim Test nur eine einfache Gruppen- und Userangabe, Apache 2 hat mit der eben genannten Variante keine Probleme gezeigt


Zugriffe mit dem Browser sperren

Die Datei ".htaccess" selbst muss zwangsweise Leseberechtigungen haben da sie sonst nicht funktioniert soll aber eigentlich nicht für jeden einsehbar sein was auch ggf. für ".htgroups" und ".htusers" gilt

Am besten direkt im Root-Ordner der Domain eine ".htaccess" mit den folgenden Zeilen plazieren womit verhindert wird das sämtliche Dateien der Domain welche mit ".ht" beginnen über den Browser einsehbar sind

Im Beispiel wird dies auch gleich für Dateien mit den Endungen ini und dat erledigt die normalerweise auch eher Daten für interne Zwecke (Skripts) enthalten

<Files ~ "^.ht">
Order allow,deny
Deny from all
</Files>
<Files *.ini>
Order allow,deny
Deny from all
</Files>
<Files *.dat>
Order allow,deny
Deny from all
</Files>