Dieser Artikel bietet eine Übersicht dazu, wie man einen Webhosting Provider mit PHP Support sehr einfach und praktisch als Google Cloud / MS Onedrive Alternative zur Speicherung von Daten über das WebDAV Protokoll nutzen kann.
In Zeiten der aktuellen US Regierung macht man sich als Europäer Gedanken, wie man technologisch unabhängiger von US Unternehmen werden kann. Dabei ist die Speicherung von Daten in der Cloud einer der wichtigsten Aspekte. Die meisten Privatnutzer speichern sehr viele, auch sensible Daten in Google Drive oder Microsoft Onedrive – einfach weil es bequem und einfach ist. Dabei gibt es zumindest für diejenigen Nutzer, die einen Webhoster mit PHP Support, beispielsweise für die private Homepage, haben, eine gute Alternative, die meist sogar mehr Speicherplatz bietet: Den eigenen WebDAV Cloud Speicher.
Ich selbst nutze ein günstiges Strato Paket für mein Webhosting (Hosting Starter), welches neben den üblichen Features zu Mail, DNS und Web üppige 50 GB Speicher beinhaltet.
Server Einrichtung
Um einen einfachen WebDAV Cloud Speicher über ein PHP Script einzurichten, kann man die kostenlose Opensource Bibliothek Sabre nutzen. Diese bietet mit der zusätzlichen Software Baikal übrigens auch eine sehr gute Möglichkeit, per CalDAV und CardDAV Kalender und Adressbücher im eigenen Webspace einzurichten – und das sogar dank SQLite ohne zusätzliche Datenbank.
Hat man die Sabre Bibliothek im Webspace heruntergeladen und entpackt, kann man anschließend mit einem sehr kleinen Script den WebDAV Server einrichten:
<?php
declare(strict_types=1);
ini_set('session.cookie_httponly', '1');
ini_set('display_errors', '0');
ini_set('log_errors', '1');
require __DIR__ . '/../baikal/vendor/autoload.php';
use Sabre\DAV;
use Sabre\DAV\Auth\Plugin as AuthPlugin;
use Sabre\DAV\Auth\Backend\BasicCallBack;
use Sabre\DAV\Locks\Plugin as LocksPlugin;
use Sabre\DAV\Locks\Backend\PDO as LocksBackend;
// Absolute Pfade verwenden, nicht relative Pfade.
// Relative Pfade können je nach PHP-FPM/Apache working directory Probleme machen.
$dataPath = __DIR__ . '/data';
$lockDbPath = __DIR__ . '/locks.sqlite';
if (!is_dir($dataPath)) {
throw new RuntimeException('WebDAV data directory does not exist: ' . $dataPath);
}
if (!is_writable($dataPath)) {
throw new RuntimeException('WebDAV data directory is not writable: ' . $dataPath);
}
if (!file_exists($lockDbPath)) {
throw new RuntimeException('Lock database does not exist: ' . $lockDbPath);
}
$rootDirectory = new DAV\FS\Directory($dataPath);
$server = new DAV\Server($rootDirectory);
$server->setBaseUri('/webdav-cloud/server.php/');
// Auth
$authBackend = new BasicCallBack(function (string $username, string $password): bool {
return hash_equals('myusername', $username)
&& hash_equals('mypassword', $password);
});
$authPlugin = new AuthPlugin($authBackend, 'stickler.de WebDAV Login');
$server->addPlugin($authPlugin);
// WebDAV Locks
$pdo = new PDO('sqlite:' . $lockDbPath);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$locksBackend = new LocksBackend($pdo);
$locksPlugin = new LocksPlugin($locksBackend);
$server->addPlugin($locksPlugin);
$server->exec();
// Optional: Browser Plugin nur für Debug/Entwicklung
$server->addPlugin(new DAV\Browser\Plugin());
$server->exec();
Das oben gezeigte Script enthält ein paar Anpassungen, sodass SabreDAV auch problemlos mit Linux fsdav2 funktioniert. Hierbei wird auch eine SQLite Datenbank für File Locks verwendet (siehe https://sabre.io/dav/locks/).
Hat man das Script als server.php in einem Verzeichnis auf dem Webspace angelegt und das Passwort im Code entsprechend angepasst, muss man noch ein Unterverzeichnis „data“ anlegen, das dann alle in der WebDAV Cloud gespeicherten Dateien enthalten wird.
Achtung: Dieses Verzeichnis unbedingt mit einer .htaccess Datei vor Zugriff schützen!
Hat man diese Schritte befolgt, kann man folgendermaßen auf die Daten zugreifen:
Zugriff unter Windows
Im Explorer „Netzlaufwerk verbinden“ auswählen und dort die Adresse in der Form https://<servername>/<verzeichnis>/server.php angeben. Anschließend fragt Windows nach Benutzername und Passwort. Sofern alles funktioniert, ist das Cloud Verzeichnis anschließend direkt als Netzlaufwerk verfügbar.
Zugriff unter Linux
Unter Linux muss man zunächst das davfs2 Paket installieren (üblicherweise mit dem Befehl „sudo apt install fsdav2“). Anschließend kann man ein Mount Verzeichnis anlegen z.B. /mnt/webdav-cloud.
In der Datei /etc/davfs2/secrets die Zugangsdaten hinterlegen:
https://<server>/<verzeichnis>/server.php admin <your-password>
Als letzten Schritt dann noch die Datei /etc/fstab bearbeiten und dort folgende Zeile einfügen (gegebenenfalls die Optionen an eigene Bedürfnisse anpassen), um das Laufwerk automatisch beim Booten zu mounten:
https://<server>/<verzeichnis>server.php /mnt/webdav-cloud davfs noauto,_netdev,x-systemd.automount,x-systemd.idle-timeout=60,wqrw,user,uid=1000,gid=1000,iocharset=utf8 0 0
Anschließend sollte das Laufwerk nach dem Booten bereitstehen. Ansonsten kann man es auch mit dem Befehl „sudo mount /mnt/webdav-cloud“ manuell einbinden.
Unter Ubuntu 24.04 hatte ich selbst das Problem, dass die Verbindung des Öfteren aus unerfindlichen Gründen abgebrochen ist. In den Log-Files konnte man einen Segfault in davfs2 erkennen. Eine Suche im Web lieferte die Lösung, die davfs Version manuell auf die unter folgender URL verfügbare Version zu aktualisieren.
https://security.ubuntu.com/ubuntu/pool/universe/d/davfs2/davfs2_1.7.1-1_amd64.deb
Anschließend lief das davfs Mounten problemlos ohne Abbrüche!