Einen Cloud- Dateiserver mit WebDAV und Apache erstellen

Ihr eigenes Cloud- Laufwerk lässt sich einfach selbst erstellen. Durch das IDNT Single-SignOn stehen alle Benutzerkonten auch auf den Cloud Servern zur Verfügung, wodurch sich mit einfachen Mitteln ein Dateiserver in der Cloud erstellen lässt. Auf die hierüber erstellen Freigaben können Benutzer dann direkt als Laufwerk im Windows Explorer oder im Mac OS Finder zugreifen.

Die Einsatzmöglichkeiten sind Vielfältig und das Rezept einfach. Warum also nicht gleich mal ausprobieren? In diesem Beispiel erstellen wir das Web- Laufwerk unter Centos mit Hilfe des Apache Webservers. Das Konzept lässt sich aber auch leicht auf andere Systeme übertragen.


Was Sie benötigen:


  • Den Apache Webserver

    Falls dieser noch nicht installiert ist, lässt sich dies schnell nachholen:

    $ yum -y httpd


  • Das Apache Modul mod_authnz_pam

    Das Modul sorgt für die Authentifizierung der Benutzer gegen PAM, also alle auf dem Server bekannte Nutzer: 

    $ yum -y mod_authnz_pam


Nun kann es los gehen:


Konfiguration für PAM

Zunächst müssen wir eine neue Authentifizierung zu PAM hinzufügen. In diesem Beispiel nennen wir diese "webdrive". Legen Sie hierzu unter /etc/pam.d eine neue Datei mit dem Namen "webdrive" und folgendem Inhalt an:

auth required pam_sss.so
account required pam_sss.so


Speicherort festlegen

Im nächsten Schritt legen wir den Speicherort für Dateien an. In diesem Beispiel verwenden wir /var/www/webdrive

$ mkdir -p /var/www/webdrive


Apache vorbereiten

Unser Web- Laufwerk verwendet WebDAV als Protokoll. Stellen Sie daher sicher, dass die folgende Apache Module geladen werden. Entfernen Sie ggf. das Kommentarzeichen (#) vor dem jeweiligen Eintrag in der Apache Konfigurationsdatei /etc/http/conf/httpd.conf:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so


Speicherort per WebDAV freigeben

Nun erstellen wir das Web- Laufwerk. Erstellen Sie in dem Verzeichnis /etc/httpd/conf.d eine neue Datei names webdrive.conf mit dem folgenden Inhalt:

Alias /webdrive "/var/www/webdrive/"

<Directory "/var/www/webdrive">
 Options +FollowSymLinks
 DirectoryIndex README
 AllowOverride None
 Order allow,deny
 Allow from all
 Require all granted
</Directory>

<Location /webdrive>
 Dav On
 DavDepthInfinity on

 Options +FollowSymLinks
 AllowOverride None

 AuthType Basic
 AuthName "My Private Webdrive"
 AuthBasicProvider PAM
 AuthPAMService webdrive

 <Limit GET POST PUT DELETE PROPFIND PROPPATCH MKCOL COPY DUPLICATE MOVE LOCK UNLOCK OPTIONS HEAD>
  Require valid-user
 </Limit>

 SSLVerifyClient off
 AddType text/plain .php .phtml
 <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} !on
  RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [R=301,L,QSA]
 </IfModule>
</Location>

Durch den Alias haben wir bestimmt, das /webdrive als Ausgangspunkt für unser Web- Laufwerk dienen soll. Die vollständige Url lautet dann https://www.meinedomain.com/webdrive

Unter /webdrive haben wir WebDAV aktiviert und die Authentifizierung per mod_authnz_pam konfiguriert. Wichtig ist hier insbesondere die AuthPAMService Konfigurationsanweisung. Diese bezieht sich auf die eingangs erstellen PAM Konfigurationsdatei in /etc/pam.d 

Falls Sie auf dem Server PHP aktiviert haben, sollen PHP Dateien in dem Laufwerk nicht ausgeführt werden, sondern einfach wie eine Textdatei behandelt werden. Dies wird durch die AddType text/plain Konfigurationsanweisung erreicht.

In der obigen Konfiguration erhalten alle authentifizierten Benutzer Zugriff:

require valid-user

An dieser Stelle empfehlen wir einen genauen Blick in die Apache Dokumentation zum Thema Authentifizierung und Access Control: https://httpd.apache.org/docs/2.4/howto/auth.html


Zuletzt erzwingen wir noch die Umleitung auf eine TLS geschützte Verbindung per https://. Dies ist zwingend erforderlich da sonst Benutzernamen, Passwörter und alle Dateien im Klartext übertragen werden. Die meisten Clients wie zum Beispiel der Windows WebClient verweigern zudem sinnvoller Weise eine ungeschützte Verbindung.


Aktivieren der Konfiguraiton

Nun starten wir den Webserver neu um die Konfiguration zu aktivieren:

$ apachectl -k restart


Fertigstellen

Hiermit ist unser Web- Laufwerk bereit.

Wichtig sind natürlich noch die richtigen Berechtigungen im Dateisystem an unserem Speicherort unter /var/www/webdrive zu setzen. Alle IDNT.NET Benutzer in Ihrer Securitydomain sind standardmäßig Mitglied der Gruppe 10000. Um diesen grunsätzlich das Lesen und Schreiben zu ermöglichen, können wir diese Gruppe für unseren Speicherort festlegen und die Berechtigung vererben:

$ setfacl -Rdm g:10000:rwx /var/www/webdrive

Stellen Sie anschließend unbedingt nochmal sicher, das wirklich nur die gewünschte Benutzer und auch nur authentifizierte Benutzer auf den Inhalt Zugriff haben. Die Verzeichnisrechte lassen sich wie folgt anzeigen:

$ getfacl /var/www/webdrive

Tipps zum Anmelden und zur Fehlersuche

Für Windows Benutzer gilt es bei dem Verbindungsaufbau insbesondere zu beachtem, dass Linux auch bei Benutzernamen zwischen Groß- und Kleinschreibung unterscheidet. Zudem muss im Fall einer Anmeldung mit einem IDNT.NET Konto unbedingt der vollständige Benutzername angegeben werden. Hier ist auf Großschreibung der Domain zu achten. Beispiel: benutzer@CLOUD.IDNT.NET


Weiterhin hat bei unseren Tests der Verbindungsaufbau mit einem leeren Speicherort unter Windows nicht funktioniert. Die erste Anfrage von Windows lautet PROFIND /webdrive und wenn diese nicht mit einem HTTP 200 (OK) beantwortet wird, gelingt das Verbinden nicht. Wir haben als Workaround einfach eine README Datei in dem Laufwerk abgelegt und den DirectoryIndex hierauf gesetzt. Wer eine bessere Idee hat kann uns gerne eine Nachricht hinterlassen.