Der freie Webserver Nginx beherrscht nicht nur das gewöhnliche Ausliefern von Daten über HTTP und HTTPS, sondern verfügt daneben über weitere Module. Mit einem dieser Module kann WebDAV für eine Ressource bereitgestellt werden.
WebDAV steht dabei für Web-based Distributed Authoring and Versioning und basiert auf HTTP. Über WebDAV können Dateien im Internet bereitgestellt werden. Unter anderem ist WebDAV deshalb so interessant weil es die gleichen Ports wie HTTP nutzt und somit in den seltensten Fällen blockiert wird. Im ersten Schritt sollte das benötigte Modul installiert werden:
apt install libnginx-mod-http-dav-ext
Zur Nutzung des Modules für WebDAV muss die Konfiguration der jeweiligen Seite unter /etc/nginx/sites-available/ angepasst werden. In diesem Beispiel wäre dies:
nano /etc/nginx/sites-available/example
Zur dieser Konfigurationsdatei wird folgende Konfiguration hinzugefügt:
server { listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; root /var/www/example; server_name example.org; location / { dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; dav_access user:rw group:rw all:rw; autoindex on; } }
In diesem Fall wird für die Domain example.org die WebDAV-Unterstützung aktiviert. Dateien können hierbei ohne weitere Authentifizierung herunter- und hochgeladen werden. Soll WebDAV abgesichert werden, so geschieht das über den Basic authentication. Dazu wird dem location-Part folgendes hinzugefügt:
auth_basic "restricted"; auth_basic_user_file /var/www/example/.htpasswd;
Die .htpasswd-Datei kann mit dem Tool htpasswd erstellt werden:
htpasswd -c .htpasswd nutzer1
Bei der Nutzung wird das gewünschte Passwort erfragt. Soll ein weiterer Nutzer hinzugefügt werden, so muss der Parameter -c entfernt werden:
htpasswd .htpasswd nutzer2
Anschließend wird die Konfiguration von Nginx mittels:
service nginx reload
aktualisiert. Danach kann WebDAV für die Ressource verwendet werden.
Wenn die Apache Tools (htpasswd) nicht installiert sind, geht es auch direkt mit openssl:
printf „nutzer1:`openssl passwd -apr1`\n“ >> .htpasswd