lighttpd mod_evhost

Der HTTP-Server "lighttpd" ist nicht nur aufgrund seiner schon im Namen angedeuteten Sparsamkeit (wenig Rechenlast und geringer Arbeitsspeicherbedarf) überaus empfehlenswert. Seine Konfiguration ist ebenso einfach wie genial und flexibel. Allein des "etwas anderen" Ansatzes wegen ist er durchaus einen Nachmittag wert.

So kann man beispielsweise mit dem Modul "mod_evhost" einfach eine Umgebung für virtuelles Hosting zu Verfügung stellen. Die Hauptverzeichnisse von Domains und Subdomains werden damit einfach mithilfe eines Patterns eingestellt - eine Konfiguration für jede einzelne Domain oder Subdomain entfällt:

docroot = "/var/www/"
evhost.path-pattern = docroot + "/%0/%3/"

Greift man nun z.B. auf die auf den Server gerichtete Domain "www.example.com" zu, wird der Inhalt in "/var/www/example.com/www/" gesucht. Greift man auf "example.com" zu, landet man in "/var/www/example.com//". Möchte man von dort automatisch auf "www.example.com" weiterleiten, kann man eine Datei "index.php" hinterlegen, die dies mit Header-Angaben bewerkstelligt.

Tatsächlich birgt das ganze jedoch auch ein gewisses Risiko. Den Inhalt von "www.example.com" kann man bei dieser Konfiguration auch über "example.com/www" abrufen. Ist auf "www.example.com" beispielsweise eine Django-Installation hinterlegt, könnte man über "example.com/www" Zugriff auf die dahinterstehenden Dateien bekommen. Sind jetzt die Python-Dateien lesbar, ist der Angreifer schnell im Besitz des Datenbankpassworts oder der verwendeten SQLite Datenbank.

Um das zu verhindern sollte man den Zugriff auf Unterverzeichnisse der Hauptdomain streng limitieren oder am besten ganz untersagen. Möchte man für die Hauptdomain nur den Index und die hinterlegte "index.php"-Datei freigeben, geht das allgemein für alle Domains mit folgendem Conditional:

$HTTP["host"] =~ "^([^.]+)\.([^.]+)$"
{
$HTTP["url"] !~ "^/(index.php)?$"
{
url.access-deny = ("")
}
}

Denkbar wäre auch eine Lösung die den Zugriff auf Unterordner des Hauptdomainverzeichnisses sperrt.

Tags: Linux