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:
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.
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.
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.
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.