Inhaltsverzeichnis

Quelle1)

Webdav mit Apache

WebDAV mit cadaver testen

Hierfür installiere ich das Programm cadaver mit portinstall auf dem lokalen Rechner auf dem auch der Apache läuft:

#portinstall cadaver

Oder via make:

#cd /usr/ports/www/cadaver
#make install clean

Nun greifen wir auf das WebDAV Verzeichnis zu:

#cadaver http://10.9.8.7/foo

Die hier angegebene IP ist durch die eigene vergebene zu ersetzen. Nun sollte ein anderer Prompt erscheinen:

dav:/foo/>

Mittels help kann man die nutzbaren Befehle ansehen. Ich lege einen neuen Ordner an, lasse mit den Inhalt des Verzeichnisses anzeigen, lösche der Ordner wieder und versuche aus meinem Ordner foo eine Ebene nach unten zu gelangen:

dav:/foo/> mkdir bar
Creating `bar': succeeded.
dav:/foo/> ls
Listing collection `/foo/': succeeded.
Coll:   bar                                    0  Oct 28 14:43
dav:/foo/> rmcol bar
Deleting collection `bar': succeeded.
dav:/foo/> cd ..
Could not access / (not WebDAV-enabled?):
405 Method Not Allowed
dav:/foo/>                                              

Mit get kann man sich Dateien herunterladen oder mittels put hochladen. Sollte es zu einer Fehlermeldung während des Anlegens eines Verzeichnisses kommen, oder während des Löschens einer Datei, eines Verzeichnisses, so bitte das log beobachten:

#tail -f /var/log/httpd-error.log

Authentifizierung nutzen

Bisher hätte jeder, also anonym, auf unser WebDAV Verzeichnis zugreifen können. Da dies eine schlechte Idee ist, gerade wenn man WebDAV nicht nur intern nutzt sondern über das Internet, braucht es eine Authentifizierung. Hierbei muss nochmals die httpd.conf bearbeitet werden, genauer gesagt wird der vorgenommene Eintrag bezüglich des WebDAV Ordners erweitert. Ich gebe hier den kompletten Eintrag an:

DavLockDB /var/log/DavLock/DavLockDB
<Location /foo>
 Dav On
 AuthType Basic
 AuthName WebDAV
 AuthUserFile /usr/local/etc/apache2/webdav.passwd
 Require user foo
</Location>

Weitere Authentifizierungsmöglichkeiten findet man in der Apache-Dokumentation. Nachdem wir den Eintrag vorgenommen haben, müssen wir noch den Benutzer foo anlegen:

#htpasswd -c /usr/local/etc/apache2/webdav.passwd foo

Dabei wird man zweimal nach dem Kennwort für den Benutzer foo gefragt. Achtung! Legt man einen zweiten User an, so ist das „-c“ wegzulassen! Danach gibt man der Datei webdav.passwd noch die richtige Berechtigung:

#chown www:nogroup /usr/local/etc/apache2/webdav.passwd
#chmod 440 /usr/local/etc/apache2/webdav.passwd

Danach den Apache neu starten (und, wie immer, das log beobachten):

#/usr/local/etc/rc.d/apache2.sh restart

Nun greifen wir wieder mit cadaver auf unser WebDAV Verzeichnis zu, geben das den Benutzer ein, das Passwort und rufen den Inhalt des Verzeichnisses auf:

#cadaver http://10.9.8.7/foo
Authentication required for WebDAV on server `10.9.8.7':
Username: foo
Password:
dav:/foo/> ls
Listing collection `/foo/': collection is empty.
dav:/foo/>        

Hat bis hierhin alles geklappt. Glückwunsch. Das war die Grundkonfiguration eines WebDAV unter Apache 2 mit Authentifizierung. Aber das soll es ja noch nich gewesen sein.

Authentifizierung mit verschlüsselten Passwort

Bei der obigen Authentifizierung wird der Username und das Passwort im Klartext übertragen. Um dies zu verhindern sollte man digest einsetzen. Die Konfiguration verläuft nach dem gleichen Schema. Dazu in der httpd.conf folgende Zeile aktivieren:

LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so

Um dem User foo die Möglichkeit zu geben sich verschlüsselt anzumelden muss dieser mittels htdigest angelegt werden:

htdigest -c /usr/local/etc/apache2/webdav.htdigest.passwd WebDAV foo

Dabei ist zu beachten, das das realm in diesem Falle WebDAV in der Konfiguration der httpd.conf (kommen wir gleich dazu) identisch sein muss mit dem welches bei htdigest angegeben wurde. Nun nochmals die httpd.conf bearbeiten:

DavLockDB /var/log/DavLock/DavLockDB
<Location /foo>
  Dav On
  AuthType Digest
  AuthName "WebDAV"
  AuthDigestFile /usr/local/etc/apache2/webdav.htdigest.passwd
  Require user foo
 </Location>

Wie man sieht sind die Änderungen nicht gross. Sie bestehen in der Angabe von Digest und dem Verweis auf die neue Passwortdatei die für Digest nötig ist.

Mehrere Verzeichnisse für verschiedene User freigeben

Eigentlich müsste sich dies aus der Logik ergeben wie man dies bewerkstelligt. Hier aber der Schnelldurchlauf. Die httpd.conf bearbeiten und einen zweiten WebDAV Eintrag hinzufügen der auf das Verzeichnis bar verweist und dem User bar mittels Authentifizierung des Zugriff erlaubt:

<Location /bar>
 Dav On
 AuthType Basic
 AuthName WebDAV
 AuthUserFile /usr/local/etc/apache2/webdav.passwd
 Require user bar
</Location>

Danach das Verzeichnis bar im DocumentRoot erstellen und die Berechtigungen setzen:

#mkdir /usr/local/www/data/bar
#chown www:www /usr/local/www/data/foo

Nun dem Benutzer bar noch ein Passwort vergeben (Aufpassen, „-c“ nun weglassen):

#htpasswd /usr/local/etc/apache2/webdav.passwd bar

Danach den Apache neu starten und sich auf http://10.9.8.7/bar mittels cadaver connecten:

#/usr/local/etc/rc.d/apache2.sh restart
#cadaver http://10.9.8.7/bar
Authentication required for WebDAV on server `10.9.8.7':
Username: bar
Password:
dav:/bar/> ls
Listing collection `/bar/': collection is empty.
dav:/bar/>

Zugriffsberechtigung verfeinert

Bisher ist es ja so, dass jeder Benutzer auf das WebDAV Verzeichnis zugreifen kann, dies ist aber nicht immer gewünscht. Daher hier noch zwei Szenarien um den Zugriff etwas genauer zu gestalten.

Zwei Gruppen: Alle dürfen lesen, Authentifizierte schreiben

Hier kann nun jeder User das WebDAV Verzeichnis bei sich einbinden und die Dokumente lesen, bzw. herunterladen. Nur die angemeldete Benutzer (valid-user) können aber in die Verzeichnisse schreiben, diese anlegen oder Dokumente löschen.

DavLockDB /var/log/DavLock/DavLockDB
<Location /foo>
 Dav On
 <LimitExcept GET HEAD OPTIONS PROPFIND>
 AuthType Digest
 AuthName "doc-src"
 AuthDigestFile /usr/local/etc/apache2/webdav.doc-src.passwd
 Require valid-user
 </LimitExcept>
</Location>

Drei Gruppen: Alle dürfen nichts, Authentifizierte dürfen lesen, einige schreiben

Es wird immer nach einem Username und Passwort gefragt um auf das WebDAV Verzeichnis zuzugreifen. Ist dies nicht vorhanden wird der Zugriff verweigert. valid-user dürfen auf das Verzeichnis lesend zugreifen. Der Benutzer asg darf auch schreibend auf das Verzeichnis zugreifen.

 
DavLockDB /var/log/DavLock/DavLockDB.allbsd
<Location /foo>
 Dav On
 <LimitExcept GET HEAD OPTIONS PROPFIND>
 AuthType Digest
 AuthName "doc-src"
 AuthDigestFile /usr/local/etc/apache2/webdav.doc-src.passwd
 Require user asg
 </LimitExcept>
 <Limit GET HEAD OPTIONS PROPFIND>
 Require valid-user
 </Limit>
</Location>

Und was ist mit Windows?

Vorab, wie es den Anschein hat ist eine Verbindung zum WebDAV Server, so man Digest nutzt, von Windows nicht ohne weiteres möglich. Die nachfolgende Anleitung bezieht sich daher auf die unverschlüsselte Authentifizierung. Mit Windows ist die Verbindung zu einem Apache WebDAV denkbar einfach, wenn man einen Fallstrick berücksichtigt. Ich habe dies nur unter Windows XP Professional SP1 getestet.

  1. Öffnen der der Netzwerkumgebung
  2. Netzwerkumgebung hinzufügen doppelklicken
  3. Auf Weiter klicken
  4. Bei Wie soll diese Netzwerkressource erstellt werden? im unteren weissen Feld Eine andere Netzwerkressource auswählen anklicken, danach auf Weiter klicken
  5. Bei Welche Adresse verwendet Ihre Netzwerkressource muss man den Port des Webservers mit angeben: http://10.9.8.7:80/foo

Lässt man die Port-Angabe („:80“) weg, würde man nach dem Benutzer und dem Kennwort gefragt, nach dem Benutzer und den Kennwort, nach dem… Ja, es würde sich im Kreise drehen. Windows übermittelt für Freigaben nämlich nicht nur den Namen und das Kennwort, sondern auch die Domäne, und damit kann der Apache wiederum nichts anfangen. Daher muss man den Port hier einfach mitgeben, also den auf den der Apache hört: Hiermit funktioniert der Zugriff nun auch von Windows aus auf das WebDAV Verzeichnis. Man wird zweimal nach dem Benutzernamen und Kennwort gefragt, danach ist das Verzeichnis auch über den Windows Explorer unter Netzwerkumgebung erreichbar. Hat man auch noch einen Haken gesetzt das das Passwort gespeichert werden soll, so ist auch nach einem reboot die Netzwerkressource gleich wieder verfügbar.

Und was ist mit BSD?

Um ein WebDav-Filesystem in einem BSD-System zu mounten, wird WDFS benötigt. Bei FreeBSD gibt es das im Ports-Tree, zu finden ist der Port unter /usr/ports/systutils/fusefs-wdfs.

#cd /usr/ports/sysutils/fusefs-wdfs
#make install clean

Im Anschluss an die Installation muss bei FreeBSD in die Datei /etc/rc.conf folgende Eintrag hinzufügen werden, damit Fuse beim Systemstart geladen wird: fusefs_enable=„YES“

Mit Hand kann Fuse über den rc.d-Skript gestartet werden:

#/usr/local/etc/rc.d/fusefs start

Sobald Fuse gestartet ist lässt sich mit folgenden Kommandos WebDav Laufwerke mounten:

#mkdir /mnt/webdav
#mkdir ~/mountpoint
#wdfs http://ServerNameOderIpAdresse/davdir ~/mountpoint 
#wdfs http://ServerNameOderIpAdresse/davdir /mnt/webdav -o allow_other

Bei den Wdfs Kommandos kommt eine Benutzer/Passwort abfrage, wenn der WebDav-Server eine Authentifikation konfiguriert hat. Ab sofort sollte das WebDav-Laufwerk unter /mnt/webdav zur Verfügung stehen. Das allow_other ermöglicht anderen Systembenutzern neben root den Zugriff auf das „Netzlaufwerk“. Weitere Optionen von wdfs wird einem mit -h angezeigt:

wdfs -h

So, das war es nun. Viel Spaß.