Wie man WebDAV mit Lighttpd auf Debian Etch konfiguriert

Version 1.0
Autor: Falko Timme


Diese Anleitung erklärt, wie man WebDAV mit lighttpd auf einem Debian Etch Server konfiguriert. WebDAV ist eine Abkürzung für Web-based Distributed Authoring and Versioning und zudem ein Set von Extensions für das HTTP Protokoll, das dem Nutzer erlaubt Dateien direkt auf dem lighttpd Server zu editieren. Dateien müssen nun nicht mehr vorab über FTP herunter- oder hochgeladen werden. Trotzdem kann man WebDAV auch dafür benutzen, Dateien hoch- oder herunterzuladen.

Ich weise darauf hin, keine Garantie dafür übernehmen zu können, dass dies bei Dir genau so funktioniert!

1 Vorbemerkung

Ich nutze hier einen Debian Etch Server mit der IP Adresse 192.168.0.100.

2 WebDAV installieren

Lighttpd (falls nicht schon vorab vorhanden), das lighttpd WebDAV Modul sowie das apache2-utils Paket (welches das htpasswd Tool enthält, das wir später brauchen werden um eine Passwort-Datei für den WebDAV Teil zu generieren) werden wie folgt eingerichtet:

apt-get install lighttpd lighttpd-mod-webdav apache2-utils

Danach wird das Verzeichnis /var/run/lighttpd erstellt und der www-data Nutzer und Gruppe zugewiesen. Dieses Verzeichnis enthält die SQLite Datenbank, die WebDAV benötigt:

mkdir /var/run/lighttpd/
chown www-data:www-data /var/run/lighttpd/

Als nächstes wird das Modul mod_auth aktiviert:

lighty-enable-mod auth

... und /etc/lighttpd/lighttpd.conf wird geöffnet, um sicher zu stellen, dass die Module mod_alias und mod_webdav im Bereich server.modules aktiviert wurden:

vi /etc/lighttpd/lighttpd.conf

[...]
server.modules = ( "mod_access", "mod_alias", "mod_accesslog", # "mod_rewrite", # "mod_redirect", # "mod_status", # "mod_evhost", # "mod_compress", # "mod_usertrack", # "mod_rrdtool", "mod_webdav", # "mod_expire", # "mod_flv_streaming", # "mod_evasive" ) [...]
Lighttpd wird nun neu gestartet:

/etc/init.d/lighttpd restart


3 Einen virtuellen Host einrichten

Wir werden nun einen lighttpd V-Host (www.example.com) im Verzeichnis /var/www/web1/web einrichten. Wenn ein V-Host schon vorhanden ist, für das WebDAV nur noch aktiviert werden muss, können die Anleitungschritte entsprechend angepasst werden.

Zuerst wird das /var/www/web1/web Verzeichnis erstellt und der Lighttpd Nutzer (www-data) als Besitzer dem Verzeichnis zugeordnet:

mkdir -p /var/www/web1/web
chown www-data:www-data /var/www/web1/web

Dann öffnen wir /etc/lighttpd/lighttpd.conf und fügen folgenden V-Host dem Ende der Datei hinzu :

vi /etc/lighttpd/lighttpd.conf

[...]
$HTTP["host"] == "www.example.com" { server.document-root = "/var/www/web1/web" }
Nun wird lighttpd neu gestartet:

/etc/init.d/lighttpd restart


4 Den virtuellen Host für WebDAV konfigurieren

In diesem Schritt erstellen wir die WebDAV Passwort Datei /var/www/web1/passwd.dav mit dem Nutzer test (der -c Switch erstellt die Datei, falls sie nicht existieren sollte):

htpasswd -c /var/www/web1/passwd.dav test

Die Eingabe des Passwortes für den Nutzer test wird nun angefordert.

(Achtung, bitte den -c Switch nicht nutzen falls /var/www/web1/passwd.dav bereits schon vorhanden ist, andernfalls wird die Datei als komplett neue Datei wiederhergestellt, was den Verlust aller User in der Datei bedeuten würde!)

Nun ändern wir die Berechtigungen für die Datei/var/www/web1/passwd.dav. Nur noch root und die Mitglieder der www-data Gruppe haben einen Zugriff dazu:

chown root:www-data /var/www/web1/passwd.dav
chmod 640 /var/www/web1/passwd.dav

Anschliessend modifizieren wir den V-Host in /etc/lighttpd/lighttpd.conf so dass er folgendermassen aussieht:

vi /etc/lighttpd/lighttpd.conf

$HTTP["host"] == "www.example.com" {
server.document-root = "/var/www/web1/web" alias.url = ( "/webdav" => "/var/www/web1/web" ) $HTTP["url"] =~ "^/webdav($|/)" { webdav.activate = "enable" webdav.is-readonly = "disable" webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db" auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/var/www/web1/passwd.dav" auth.require = ( "" => ( "method" => "basic", "realm" => "webdav", "require" => "valid-user" ) ) } }
Die Anweisung alias.url bewirkt (zusammen mit $HTTP["url"] =~ "^/webdav($|/)") dass bei der Eingabe von /webdav tatsächlich WebDAV aufgerufen wird, aber dennoch kann der vollständige Document-Root des V-Host erreicht werden. Alle anderen URLs des V-Hosts sind noch "normale" HTTP.

Wieder starten wir lighttpd neu:

/etc/init.d/lighttpd restart


5 WebDAV testen

Wir installieren nun cadaver, ein Kommandozeilen Client für WebDAV:

apt-get install cadaver

Die Eingabe zur Überprüfung von WebDAVlautet:

cadaver http://www.example.com/webdav/

Die Eingabe eines Benutzernamens wird angefordert . Gib test ein und das entsprechende Passwort für den Nutzer test. Wenn alles richtig eingerichtet wurde, sollte der Zugang nun möglich sein. Mit der Eingabe quit verlässt man die WebDAV Shell:

server1:~# cadaver http://www.example.com/webdav/
Authentication required for webdav on server `www.example.com':
Username: test
Password:
dav:/webdav/> quit
Connection to `www.example.com' closed.
server1:~#

6 Einen Windows XP Client für die Verbindung mit der WebDAV Share konfigurieren

Diese Anleitung liegt bereits unter http://www.howtoforge.com/setting-up-webdav-with-apache2-on-debian-etch-p2vor.
Bitte gib den genauen Port für die WebDAV URL an, z.B. http://www.example.com:80/webdav. Aus unerklärlichen Gründen bewirkt dieses, dass Windows XP den normalen Usernamen (z.B. test) akzeptiert - ansonsten erwartet Windows XP NTLM Nutzernamen (diese hätten die Form www.example.comtest).

7 Einen Linux Client (GNOME) für die Verbindung mit dem WebDAV Share konfigurieren

Diese Anleitung liegt bereits unter http://www.howtoforge.com/setting-up-webdav-with-apache2-on-debian-etch-p3 vor.

8 Links

1 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: bamf

Vielen Dank für die Anleitung! Ich habe WebDAV unter Ubuntu (10.04) eingerichtet und hatte das Problem, das die befehle MOVE und COPY nicht funktioniert haben (weder unter Cadaver noch beim Zugriff mit Win 7). Der Bug der dafür verantwortlich ist, ist hier nachzulesen:
http://redmine.lighttpd.net/issues/1787
Demnach ist das Problem das Alias. Ich habe das wie folgt gelöst: Der VirtuakHost wird als Subdomain angelegt ("webdav.meine.domain" statt "meine.domain"), die Zeilen "alias.url = ..." und "$HTTP[url] = ...", sowie die letzte geschweifte Klammer werden gelöscht oder #kommentiert. WebDAV lässt sich nun über "http://webdav.meine.domain" einbinden, anstatt über "http://meine.domain/webdav - alle grundlegenden Funktionen scheinen zu laufen.