WebDAV mit Apache

HTTP ist das Universalprotokoll des Internet; von fast jedem Betriebssystem aus kann man damit lesend auf Webserver zugreifen, selbst von PDAs und Handys.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 20 Min.
Von
  • Stefan Finkenzeller
Inhaltsverzeichnis

WebDAV erweitert das Netzwerkprotokoll HTTP/1.1 um den schreibenden Zugriff auf Webressourcen. Es definiert dabei unter anderem neue HTTP-Methoden und -Header. Man kann sogar sagen, dass es sich bei WebDAV um ein flexibles und interoperables Internet-Dateisystem handelt, welches alle Vorteile von HTTP bietet, darunter Proxy-Support, Caching, Verschlüsselung, gute Performance in High-Latency-Umgebungen, Nutzung der vorhandenen Netzinfrastruktur und einfacher Durchgang durch Firewalls.

Wie man den mit Windows 2000 und XP gelieferten abgespeckten Internet Information Server (IIS) für WebDAV-Freigaben konfiguriert, haben wir im Artikel "Internet-Festplatte" erklärt. Weitgehend betriebssystemunabhängig bietet auch der Open-Source-Webserver Apache dieses Feature. Er entspricht mit dem optionalen Modul mod_dav den WebDAV-Klassen 1 und 2; dazu gehören die Dateioperationen Anlegen, Verschieben, Kopieren, Löschen und Auflisten.

Hier zeigen wir, wie die Konfiguration unter Linux aussieht. Mit minimalem Aufwand lässt sie sich auch auf die anderen Betriebssysteme übertragen, unter denen Apache läuft. Wir gehen von der aktuellen Apache-Version 2.0 aus, doch die hier beschriebenen Funktionen gibt es so auch für die immer noch weit verbreitete Vorgängerversion 1.3.

Die WebDAV-Einrichtung besteht aus fünf Schritten: Aktivieren der Module, Anlegen einer Lock-Datenbank, Freigeben von Verzeichnissen, Anlegen der Benutzerverwaltung und schließlich Sichern des Ganzen per SSL.

Seit der Version 2.0 gehört WebDAV mit den Modulen mod_dav und mod_dav_fs zum Lieferumfang von Apache. Die gängigen Linux-Distributionen wie Suse und Red Hat enthalten sie in vorkompilierter Form. Die Installation ist mit den jeweiligen Tools wie Yast2 in wenigen Klicks erledigt. Bei der Gelegenheit spielt man auch das OpenSSL-Paket ein, das später zum Erzeugen des SSL-Zertifikats erforderlich ist.

Bei den beiden Apache2-Modulen handelt es sich um eine Weiterentwicklung des alten, aber stabilen Moduls mod_dav für Apache 1.3, welches auf dem Stand November 2001 eingefroren wurde. Bei den Distributionen wie Debian stable, die noch den alten Apache enthalten, muss man dieses Modul in der Regel als getrenntes Paket installieren. Es unterscheidet sich in der Konfiguration kaum von der neuen Version, nur gibt es noch kein separates mod_dav_fs.

Die gesamte Apache-Konfiguration findet sich unterhalb des Verzeichnisses /etc/apache2/. Die wesentlichen Einstellungen stehen in der Datei httpd.conf. Damit Apache WebDAV-Kommandos versteht, muss er das Modul mod_dav geladen haben, das seinerseits den Filesystemprovider mod_dav_fs benötigt. Das erledigen die Direktiven "LoadModule dav_module mod_dav.so" und "LoadModule dav_fs_module mod_dav_fs.so" (siehe Listing). In den meisten Distributionen stehen diese Zeilen bereits auskommentiert in der httpd.conf; dann reicht es, das Kommentarzeichen (#) vor der Zeile zu entfernen.

Damit gleichzeitige Zugriffe mehrerer Anwender auf dieselben Dateien nicht zu Datenverlust führen, muss sich Apache Sperren auf Dateien merken (Locks). Dazu dient eine Lock-Datenbank, die das Modul mod_dav_fs automatisch anlegt und verwaltet. Hierfür gibt der Administrator über die Direktive DavLockDB nur das Verzeichnis und ein Dateinamen-Präfix an. Der Eintrag "DavLockDB var/DavLock" definiert das Verzeichnis var relativ zum ServerRoot als Ablageort für die Lock-Dateien. Der Benutzer-Account, unter dem Apache läuft (z. B. wwwrun), braucht Lese- und Schreibrechte in diesem Verzeichnis. Falls später beim WebDAV-Zugriff im Fehlerprotokoll von Apache die Meldung "Could not open the lock database" erscheint, stimmen die Dateirechte noch nicht.

Normalerweise serviert Apache alle Dateien und Verzeichnisse unterhalb des in der Direktive DocumentRoot definierten Verzeichnisses. Als Fileserver soll er jedoch wahrscheinlich auch Verzeichnisse freigeben, die außerhalb dieser Hierarchie liegen. Dazu gibt es zwei Möglichkeiten: Entweder bindet man das gewünschte Verzeichnis mittels symbolischem Link unterhalb des DocumentRoot ein und veranlasst Apache, mit der Direktive "Option FollowSymLinks" den Links zu folgen. Oder man erzeugt mit der Apache-Direktive Alias ein Pseudo-Verzeichnis innerhalb von DocumentRoot.

Bei der zweiten Methode stehen alle Informationen zu den Freigaben in der Konfigurationsdatei httpd.conf beisammen. Das verbessert die Übersicht und bringt damit auch einen Sicherheitsgewinn. Denn symbolische Links haben die Angewohnheit, in Vergessenheit zu geraten …

Der Eintrag "Alias /daten /usr/data" in httpd.conf verknüpft das Verzeichnis /usr/data mit dem virtuellen Verzeichnis /daten auf dem Server. Für die Freigabe ist es wichtig, dass der Apache-Benutzer (z. B. wwwrun) in dieses Verzeichnis schreiben darf, da alle WebDAV-Zugriffe mit den Rechten dieses Benutzers erfolgen.

Im Beispiel steht die Konfiguration der Freigabe in der Directory-Direktive "<Directory /usr/data>". Die Directory-Direktiven beeinflussen alle Requests, die Apache auf das angegebene Verzeichnis im Dateisystem bezieht. Alternativ kann man die Einstellungen auch in einen Location-Block schreiben, der sich auf das per Alias-Direktive zugewiesene virtuelle Verzeichnis bezieht. Für den beschriebenen Fall hieße sie also <Location /daten>, damit alle Requests mit der URL http://meinserver/daten diese Konfiguration verwenden. Für WebDAV sind die beiden Direktiven gleichwertig. Auf einem Fileserver möchte man aber in der Regel ein bestimmtes Verzeichnis freigeben, sodass die Directory-Methode etwas logischer erscheint.

Egal welche der beiden Möglichkeiten verwendet wird, die Zeile "Dav on" innerhalb des Blocks schaltet WebDAV ein.

Sind Skriptsprachen wie PHP aktiviert, liefert Apache beim Zugriff auf eine Skriptdatei nicht deren Inhalt, sondern ruft das Skript auf und gibt seine Ausgabe zurück. Dies ist für einen Fileserver natürlich nicht das erwartete Ergebnis. Die Directive "ForceType text/plain" korrigiert es.

Damit die Konfigurationsänderungen wirksam werden, muss der Admin den Webserver neu starten. Am besten benutzt er dazu das Init-Skript seiner Distribution (im Verzeichnis /etc/init.d/, in Suse-Linux /etc/init.d/apache2) mit dem Parameter restart.

Nun können alle Anwender, die Kontakt zum Webserver haben, auf das freigegebene Verzeichnis zugreifen, und zwar auch schreibend. Um das einzuschränken, muss eine Benutzeranmeldung her. Apache beherrscht von sich aus Digest- und Basic-Authentifizierung sowie die Anmeldung mittels SSL-Client-Zertifikaten (mod_ssl). Client-Zertifikate sind zwar eine sehr sichere Sache, die Konfiguration verlangt aber einiges Know-how, und der Betrieb ist mit Aufwand verbunden. Interessierte können sich auf der Apache-Seite ausgiebig darüber informieren.