WebDAV für eigene Zwecke nutzen.

Einleitung

Daten, die nicht in die Hände Dritter gelangen sollen, dürfen eigene Geräte wie beispielsweise Klapprechner und Mobiltelefon nicht verlassen. Wenn sie über unterschiedliche eigene Geräte hinweg benutzt werden, muss die Kommunikation zwischen den Geräten verschlüsselt sein.

Hierbei hilft ein eigener Rechner, der Speicherplatz bereit hält und über das Internet erreichbar ist. Tipps zur Bereitstellung solch eines Rechners finden sich z.B. in den Beiträgen Minimal und Eigenbau.

Eine Möglichkeit, Daten von dort via WebDAV überall verwenden zu können beschreibt dieser Artikel.

Einsatzszenarien

Rechner mit Linux, Mac OS und Windows können im Dateimanager des Betriebssytems standardmäßig Datenquellen via WebDAV einbinden als wären sie lokal auf den betreffenden Geräten befindliche Ordner und Daten. Bei iPhone und iPad oder auch Mobilgeräten mit Android ist das mit zahlreichen Apps ebenfalls möglich. Hier hilft eine Suche im App Store nach File Manager Apps.

So lassen sich beispielsweise zentral abgelegte Office-Dokumente über viele Geräte hinweg ansehen oder bearbeiten oder Fotos speichern und betrachten. Selbst Videos können aus einer entfernten WebDAV Datenquelle angesehen werden.

Die Arbeit mit den eigenen Daten gelingt über viele verschiedene eigene Geräte gerade so, als wären sie lokal auf dem jeweiligen Gerät gespeichert.

WebDAV einrichten

Für Webserver wie Lighttpd, Nginx oder Apache kann WebDAV über ein Zusatzmodul des Servers eingeschaltet werden. In diesem Artikel wird hingegen die Verwendung von Tomcat näher beschrieben.

Herunterladen

Zunächst werden Tomcat und Java von folgenden Orten im Internet heruntergeladen und entpackt:

Wir nehmen an, die Dateien liegen nach dem Entpacken in den Ordnern

/home/fred/prg/jdk11
/home/fred/prg/tomcat10

Zur Vorbereitung einer Ausführung von Tomcat werden zunächst die Skripte im Ordner /home/fred/prg/tomcat10/bin als ausführbar gekennzeichnet.

sudo chmod -R ug+x /home/fred/prg/tomcat10/bin

Optional kann die heruntergeladene Variante von Tomcat um nicht erforderliche Teile befreit werden. Hier noch aufführen, welche das sind.

Ablageort anlegen

Ein einzelner Ordner soll über WebDAV zugänglich sein. Für diesen Artikel wird dazu beispielsweise der folgende Ordner angelegt

mkdir /home/fred/www/dav

Kontext anlegen

Der zuvor erstellte Ordner /home/fred/www/dav wird Tomcat über einen neuen Kontext zugänglich gemacht. Dazu wird im Ordner /home/fred/prg/tomcat10/conf/Catalina/localhost eine neue Datei namens dav.xml angelegt. Die Datei muss folgenden Inhalt haben

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/dav" docBase="/home/fred/www/dav">
</Context>

Damit wird der Inhalt im Ordner /home/fred/www/dav über den Kontext /dav zugänglich.

WebDAV einschalten

Im Ordner /home/fred/www/dav wird ein Ordner WEB-INF und darin die Datei web.xml mit folgendem Inhalt angelegt.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <description>WebDav-Verzeichnis</description>
    <display-name>dav</display-name>
    <servlet>
        <servlet-name>webdav</servlet-name>
        <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>webdav</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <security-constraint>
        <display-name>davConstraint</display-name>
        <web-resource-collection>
            <web-resource-name>dav</web-resource-name>
            <description/>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description>davNutzerConstraint</description>
            <role-name>davNutzer</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>
    <security-role>
        <description/>
        <role-name>davNutzer</role-name>
    </security-role>
</web-app>

Die Eintragungen bedeuten, dass Tomcat Inhalte des Ordners, in dem der Ordner WEB-INF liegt, lesend und schreibend über WebDAV zugänglich macht und dass dies nur Benutzern gewährt wird, die die Rolle davNutzer haben.

Benutzer anlegen

Im Ordner /home/fred/prg/tomcat10/conf wird die Datei tomcat-users.xml mit folgendem Inhalt versehen.

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
  <role rolename="davNutzer"/>
  <user username="fred" password="change-me" roles="davNutzer"/>
</tomcat-users>

Gemeinsam mit der Einstellung in der Datei web.xml bewirkt das, dass der Aufruf des Kontext /dav dieser Instanz von Tomcat nur mit Benutzer fred und Kennwort change-me gelingt.

Tomcat starten

Zur Ausführung von Tomcat wird im Ordner /home/fred/prg/tomcat10/bin die Datei start.sh mit folgendem Inhalt erstellt.

#!/bin/sh

export JAVA_HOME=/home/fred/prg/jdk11
cd /home/fred/prg/tomcat10/bin
./startup.sh

Mit Ausführung der Datei start.sh als Skript wird Tomcat gestartet. Tomcat läuft standardmäßig auf Port 8080. Das kann über die Datei /home/fred/prg/tomcat10/conf/server.xml geändert werden. Das Skript start.sh kann auch verwendet werden, um WebDAV als Dienst einzurichten, der gleich bei jedem Start des Rechners mit gestartet wird (vgl. bspw. Calypso-Anleitung).

WebDAV verwenden

Angenommen, der Rechner ist über die Domain example.com im Internet erreichbar, können nun Inhalte über folgenden URL angesehen werden.

http://example.com:8080/dav

Zusätzlich zum obigen URL kann je nach verwendetem Programm auch der folgende URL dienen

dav://example.com:8080/dav

Verbindungen sichern

Zum Schutz vor unbefugten Einblicken muss die Kommunikation über WebDAV verschlüsselt sein. Dies wird am einfachsten mit einem vorgeschalteten Reverse-Proxy-Server erreicht, der mit einem Zertifikat ausgestattet wird. Das Zertifikat kann z.B. von Let’s Encrypt bezogen werden.

Als Reverse-Proxy-Server kann einer der eingangs erwähnten Server Lighttpd, Nginx oder Apache dienen. Die Dokumentation dieser Server beschreibt dann, wie mit dem Zertifikat die Verschlüsselung eingeschaltet wird. Bei Lighttpd sind dazu beispielsweise die Schritte aus folgendem Kapitel der Doku nötig.

Reverse Proxy

Der Zugang aus dem Internet zum eigenen Rechner wird üblicherweise mit Hilfe eines Dienstes für dynamisches DNS eingerichtet. Auf diese Weise ist eine wechselnde IP-Adresse, wie sie von DSL-Anbietern vergeben wird, jederzet über einen festen URL aus dem Web erreichbar.

Ist das dynamische DNS eingerichtet, wird beim Domain-Hosting-Dienst der DNS-Eintrag zur eigenen Domain wie z.B. example.com auf den URL eingestellt, den der Dienst für dynamisches DNS vergeben hat. Im heimischen Router muss dann nur noch eine Weiterleitung der Ports 80 und 443 auf den betreffenden Rechner erfolgen.

Je nach verwendetem Produkt für den Reverse Proxy ist in der Konfiguration die Weiterleitung zu Tomcat einzustellen. Bei Lighttpd ist das z.B. im folgenden Kapitel beschrieben.

In der Konfiguration muss der Port verwendet werden, auf dem Tomcat läuft. Damit ist der Rechner bereit, um als Endpunkt für eine Domain wie z.B. example.com zu dienen und WebDAV ist auch über die folgenden verschlüsselten URLs möglich

https://example.com/dav oder davs://example.com/dav

Schlussbemerkungen

Wenn ohnehin ein Produkt wie Lighttpd als Reverse Proxy genutzt wird, könnte natürlich WebDAV direkt über den Webserver eingeschaltet werden. Tomcat könnte damit entfallen.

Allerdings ist die Konfiguration von WebDAV z.B. bei Lighttpd nicht so einfach und vor allem wäre WebDAV dann nicht ohne weiteres unabhängig vom Reverse Proxy einzusetzen. Der LockoutRealm-Mechanismus von Tomcat erhöht zudem den Schutz vor Brute-Force-Attacken. Ohne Tomcat wäre dies nicht ohne weiteres herstellbar und erforderte erheblichen zusätzlichen Aufwand. Diese Einschränkungen gelten für Nginx und Apache gleichermaßen.

Der hier beschriebene Einsatz von Tomcat verspricht mehr Flexibilität und Unabhängigkeit. Er ist zudem mit überschaubaren Konfigurationshandgriffen erledigt.

Der Einsatz von WebDAV für den Zugang zur eigenen Dateiablage erspart die Abhängigkeit von Cloud- oder anderen Anbietern und verhindert so Einblicke Dritter. Die Hoheit und Kontrolle über die eigenen Daten verbleibt stets beim Eigentümer der Daten.