Quelle1)
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
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.
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.
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/>
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.
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>
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>
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.
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.
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ß.