WebDAV mit Apache einrichten

WebDAV allgemein

Eine bequeme Möglichkeit, Dateien über das Internet auszutauschen, ist WebDAV. WebDAV ist ein offener Standard, der in vielen Betriebssystemen unterstützt wird. Dabei wird nur das HTTP-Protokoll verwendet, wodurch sich auf einen Schlag mehrere Vorteile ergeben:

  • keine neue Serversoftware erforderlich (geringerer Einrichtungs- und Wartungsaufwand, Sicherheit)
  • Firewall-freundlich
  • idR. keine Konfiguration auf Clientseite erforderlich (keine Port-Freischaltung o.ä.)
  • Abruf der Dateien mit beliebigem Webbrowser möglich
  • durch HTTP Authentifizierung und .htaccess einfache Benutzerverwaltung
  • SSL/TLS ermöglicht auch verschlüsselte Übertragung
  • Clients für alle Betriebssysteme verfügbar, in Windows sogar im Explorer standardmäßig integriert ("Webordner")

Ziel

Ziel ist jetzt die Einrichtung eines sicheren WebDAV-Ordnerbaums. Nur authentifizierte Benutzer sollen auf die Dateien zugreifen können, sämtliche Übertragungen müssen SSL-verschlüsselt ablaufen. Außerdem soll nur ein Benutzer auf die gesamte Ordnerhierarchie zugreifen können, alle anderen haben nur Zugriff auf ihren jeweiligen Ordner.

Einrichtung

Zunächst sucht man sich ein Verzeichnis, das den WebDAV-Baum beinhalten wird, z.B. /var/www/html. Anschließend legt man den Verzeichnisbaum an, also

mkdir /var/www/html/files
cd /var/www/html/files
mkdir user1 user2

Anschließend werden die Benutzer angelegt:

htpasswd -bc .htpasswd user1 pwd1
 htpasswd -b user2 pwd2
 htpasswd -b superuser pwd3

Die Datei kann natürlich an einem beliebigen Ort liegen, wo Apache Zugriff hat. Es ist sogar etwas sicherer, die Passwort-Datei außerhalb eines per HTTP zugreifbaren Verzeichnisses zu platzieren, so dass selbst im Falle eines Konfigurationsfehlers die Datei mit den Passwörtern nicht einfach heruntergeladen werden kann. In der Standardkonfiguration sollte aber Apache das herunterladen von Dateien, die mit ".ht" beginnen, gar nicht zulassen.

Nun muss noch der DAV-Zugriff konfiguriert werden: Dies kann irgendwo in der Apache-Konfiguration passieren, ich lege meist eine neue conf-Datei in /etc/httpd/conf.d an. Diese sieht in etwa wie folgt aus:

Alias /dav /var/www/html/files/
<Location /dav>
       DAV On
       SSLRequireSSL
       # how to authenticate a user
       AuthType Basic
       AuthName "Webordner"
       AuthUserFile /var/www/html/files/.htpasswd
       require user superuser
</Location>
<Location /dav/user1>
       require user user1 superuser
       Options +Indexes
</Location>
<Location /dav/user2>
       require user user2 superuser
       Options +Indexes
</Location>

Da die Dateien in einem normalen Verzeichnis unterhalb des Webroot liegen, kann man noch ganz normal per HTTP ohne Authentifizierung und Verschlüsselung die Dateien herunterladen. Das ist natürlich nicht gewollt. Um das zu verhindern, legt man eine .htaccess in /var/www/html/files mit dem folgenden Inhalt:

Deny from All

Praxistipp: Solltet ihr trotz des obigen Eintrags noch auf die Dateien zugreifen können, beachtet Apache die .htaccess-Datei nicht. Ein Grund dafür kann z.B. darin liegen, dass für euren Virtual Host oder für einen Verzeichnisbaum "AllowOverride None" gesetzt ist bzw. "AuthConfig" nicht in der AllowOverride-Liste steht.

Sicherheit

Das DAV-Modul läuft unter den Rechten des Apache-Benutzers. Entsprechend ist auch der Eigentümer von neu geschriebenen Dateien Apache. Dies kann sehr ärgerlich sein, wenn z.B. Skripte auf eine per WebDAV hochgeladene Datei zugreifen sollen. Eine Lösung dafür können ACLs mit default-Einträgen sein, so dass neue Dateien in dem Verzeichnis sowohl von Apache als auch von einem (oder mehreren) normalen Benutzer geschrieben werden können:

setfacl --set \
    user::rwx,group::r-x,other:r-x,group:apachegroup:rwx,\
         default:user:myuser:rwx,default:group:myusergroup:r-x,default:group:apachegroup:rwx,default:other:r-x \
         /var/www/html/files

In diesem Beispiel erhält der Benutzer myuser (Gruppe myusergroup) alle Rechte auf das Verzeichnis und standardmäßig auch auf alle neuen Dateien darin. Gleiches gilt für die Gruppe des apache (apachegroup). Natürlich müssen die Namen entsprechend angepasst werden.

Mir ist derzeit (August 2007) keine Software bekannt, die es erlauben würde, den Eigentümer hochgeladener Dateien entsprechend der Anmeldung zu ändern. Dies wäre für mich insbesondere für CGI-Skripte im Zusammenhang mit suexec interessant.


Spezielle Client-Probleme

Mac OS X und SSL

Unter MacOS X beherrscht der integrierte Client leider keine SSL-verschlüsselten Übertragungen. Hierfür sind Zusatztools notwendig. Inwieweit Apple das mit 10.4 ("Tiger") geändert hat, weiß ich nicht, das Problem besteht aber auf jeden Fall mit 10.3 und kleiner.