Tips en Trucs 2018

WebDAV met Lighttpd

WebDAV (Web-based Distributed Authoring and Versioning) is een uitbreiding op het HTTP protocol waardoor gebruikers rechtstreeks bestanden kunnen aanpassen op de HTTP-server waardoor downloaden en terug uploaden via FTP niet meer nodig is. Vanzelfsprekend kan je via WebDAV ook bestanden up- en downloaden.

Elke zichzelf respecterende webserver ondersteunt WebDAV. Deze tip gebruikt lighttpd. Mocht je reeds een andere webserver draaien, vergeet dan niet dat je maar één enkele webserver op poort 80 (HTTP) kunt draaien. M.a.w. pas de hier gebruikte configuratie aan of schakel de andere webserver uit of configureer WebDAV op de door U gebruikte webserver.

Lighttpd en WebDAV installeren

Installeer lighttpd, de bijhorende WebDAV module en de apache2-utils (bevat de opdracht htpasswd om wachtwoorden voor de WebDAV map aan te maken):

dany@pindabook:~> sudo zypper install lighttpd lighttpd-mod_webdav apache2-utils
[sudo] wachtwoord voor root: 
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
'apache2-utils' is al geïnstalleerd.
Geen updatekandidaat voor bijwerken van 'apache2-utils-2.4.23-19.1.x86_64'. De hoogst beschikbare versie is al geïnstalleerd.
Pakketafhankelijkheden oplossen...

De volgende 3 NIEUWE pakketten zullen worden geïnstalleerd:
  lighttpd lighttpd-mod_webdav spawn-fcgi

3 nieuwe te installeren pakketten.
Totale downloadgrootte: 455,7 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 1,1 MiB worden gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j): 
pakket spawn-fcgi-1.6.4-6.1.x86_64 wordt opgehaald                                             (1/3),  16,2 KiB ( 24,5 KiB uitgepakt)
Ophalen: spawn-fcgi-1.6.4-6.1.x86_64.rpm ....................................................................................[gereed]
pakket lighttpd-1.4.45-4.2.x86_64 wordt opgehaald                                              (2/3), 361,6 KiB (  1,0 MiB uitgepakt)
Ophalen: lighttpd-1.4.45-4.2.x86_64.rpm .....................................................................................[gereed]
pakket lighttpd-mod_webdav-1.4.45-4.2.x86_64 wordt opgehaald                                   (3/3),  78,0 KiB ( 44,8 KiB uitgepakt)
Ophalen: lighttpd-mod_webdav-1.4.45-4.2.x86_64.rpm ..........................................................................[gereed]
Controleren op conflicten tussen bestanden: .................................................................................[gereed]
(1/3) Installeren van: spawn-fcgi-1.6.4-6.1.x86_64 ..........................................................................[gereed]
(2/3) Installeren van: lighttpd-1.4.45-4.2.x86_64 ...........................................................................[gereed]
Aanvullende rpm-uitvoer:
Updating /etc/sysconfig/lighttpd...


(3/3) Installeren van: lighttpd-mod_webdav-1.4.45-4.2.x86_64 ................................................................[gereed]

Activeer in het modules configuratiebestand van lighttpd de modules om koppelingen, authentificatie en WebDAV mogelijk te maken:

dany@pindabook:~> sudo joe /etc/lighttpd/modules.conf

Activeer (verwijder het commentaarteken #) de regels:

  "mod_alias",
  "mod_auth",
...
include "conf.d/webdav.conf"

En sla de aanpassingen op met Ctrl + k + x. Om lighttpd te starten, activeren we deze eerst. Lighttpd wordt daardoor ook automatisch gestart bij het starten van het systeem. Pas daarna kan je lighttpd manueel (zonder systeemherstart) opstarten met:

dany@pindabook:~> sudo systemctl enable lighttpd
lighttpd.service is not a native service, redirecting to systemd-sysv-install
Executing /usr/lib/systemd/systemd-sysv-install enable lighttpd
dany@pindabook:~> sudo systemctl start lighttpd

Virtuele host aanmaken

Een webadres koppel je aan een WebDAV map met een virtuele host. Open daarvoor als systeembeheerder het lighttpd configuratiebestand aan met uw favoriete editor:

dany@pindabook:~> sudo joe /etc/lighttpd/lighttpd.conf

En voeg achteraan de regels voor een virtuele host toe:

$HTTP["host"] == "pindabook.local" {
  server.document-root = "/srv/www/htdocs/web"  
}

Let wel: pindabook.local moet een bereikbaar webadres zijn, bijvoorbeeld samengesteld uit de hostname (in het voorbeeld pindabook) van de computer waarop lighttpd draait en het domein (.local in het voorbeeld). Het domein .local is bij mij afkomstig van een Avahi zeroconf netwerk.

Maak de WebDAV map aan en zorg dat lighttpd er de eigenaar van wordt, zodat er via de webserver in gewerkt kan worden.

dany@pindabook:~> sudo mkdir /srv/www/htdocs/web
dany@pindabook:~> sudo chown lighttpd:lighttpd /srv/www/htdocs/web

Breng lighttpd op de hoogte van de aanpassingen door de webserver te herstarten:

dany@pindabook:~> sudo systemctl restart lighttpd

De virtuele host uitbreiden met WebDAV

De WebDAV map schermen we af met een gebruikersnaam en bijhorend wachtwoord. Een wachtwoord voor de gebruiker test maken we aan met de opdracht:

dany@pindabook:~> sudo htpasswd -c /srv/www/htdocs/passwd.dav test
New password: 
Re-type new password: 
Adding password for user test

De -c optie zorgt dat het wachtwoordbestand opnieuw wordt aangemaakt en dus ook een eventueel bestaand wachtwoordbestand onverbiddelijk overschrijft. Daarna beveiligen we het wachtwoordbestand door deze toe te kennen aan de systeembeheerder root en leden van de groep lighttpd de wachtwoorden kunnen raadplegen.

dany@pindabook:~> sudo chown root:lighttpd /srv/www/htdocs/passwd.dav
dany@pindabook:~> sudo chmod 640 /srv/www/htdocs/passwd.dav

Pas het lighttpd configuratiebestand als systeembeheerder met uw favoriete editor aan:

dany@pindabook:~> sudo joe /etc/lighttpd/lighttpd.conf

Pas de configuratie van de virtuele host als volgt aan om deze met WebDAV uit te breiden:

$HTTP["host"] == "pindabook.local" {
  server.document-root = "/srv/www/htdocs/web"
  alias.url = ( "/webdav" => "/srv/www/htdocs/web" )
  $HTTP["url"] =~ "^/webdav($|/)" {
    webdav.activate = "enable"
    webdav.is-readonly = "disable"
    dir-listing.activate = "enable"
    auth.backend = "htpasswd"
    auth.backend.htpasswd.userfile = "/srv/www/htdocs/passwd.dav"
    auth.require = ( "" => ( "method" => "basic",
                             "realm" => "webdav",
                             "require" => "valid-user" ) )
  }
}

Herstart de lighttpd webserver om de aangepaste configuratie te activeren:

dany@pindabook:~> sudo systemctl restart lighttpd

WebDAV testen

Daarvoor installeren we de opdracht cadaver:

dany@pindabook:~> sudo zypper install cadaver
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

Het volgende NIEUWE pakket zal worden geïnstalleerd:
  cadaver

1 nieuw te installeren pakket.
Totale downloadgrootte: 86,6 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 282,0 KiB worden gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j): 
pakket cadaver-0.23.3-79.1.x86_64 wordt opgehaald                                              (1/1),  86,6 KiB (282,0 KiB uitgepakt)
Ophalen: cadaver-0.23.3-79.1.x86_64.rpm .....................................................................................[gereed]
Controleren op conflicten tussen bestanden: .................................................................................[gereed]
(1/1) Installeren van: cadaver-0.23.3-79.1.x86_64 ...........................................................................[gereed]

En testen we de WebDAV map door deze met cadaver te openen, de gebruikersnaam en bijhorend wachtwoord in te geven, een bestand (hier desktop.jpeg uit mijn Persoonlijke map) te uploaden, de inhoud van de WebDAV map op te vragen, het geüploade bestand terug te verwijderen en cadaver af te sluiten.

dany@pindabook:~> cadaver http://pindabook.local/webdav
Authentication required for webdav on server `pindabook.local':
Username: test
Password: 
dav:/webdav/> put desktop.jpeg
Uploading desktop.jpeg to `/webdav/desktop.jpeg':
Progress: [=============================>] 100,0% of 556009 bytes succeeded.
dav:/webdav/> ls
Listing collection `/webdav/': succeeded.
        desktop.jpeg                      556009  feb 24 14:49
dav:/webdav/> delete desktop.jpeg 
Deleting `desktop.jpeg': succeeded.
dav:/webdav/> ls
Listing collection `/webdav/': collection is empty.
dav:/webdav/> quit
Connection to `pindabook.local' closed.

Mocht niet alles verlopen zoals verhoopt, raadpleeg dan het fouten logboek:

dany@pindabook:~> sudo tail /var/log/lighttpd/error.log
2018-02-24 16:37:47: (server.c.1269) Configuration of plugins failed. Going down. 
2018-02-24 16:39:32: (log.c.217) server started 
2018-02-24 16:39:32: (mod_webdav.c.214) sqlite3_open failed for /var/run/lighttpd/lighttpd.webdav_lock.db unable to open database file 
2018-02-24 16:39:32: (server.c.1269) Configuration of plugins failed. Going down. 
2018-02-24 16:41:48: (log.c.217) server started 
2018-02-24 16:43:24: (server.c.1828) server stopped by UID = 0 PID = 3026 
2018-02-24 16:43:54: (log.c.217) server started 
2018-02-24 16:43:54: (mod_webdav.c.214) sqlite3_open failed for /var/run/lighttpd/lighttpd.webdav_lock.db unable to open database file 
2018-02-24 16:43:54: (server.c.1269) Configuration of plugins failed. Going down. 
2018-02-24 17:50:49: (log.c.217) server started

Ook via grafische omgevingen zoals KDE kan je WebDAV mappen benaderen, onderstaande afbeelding toont een onze WebDav map via de bestandsbeheerder Dolphin. Let wel: niet alle grafische WebDAV clients ondersteunen alle WebDAV functies. Zo kan je via Dolphin wel bestanden uploaden, downloaden, aanmaken en aanpassen, maar niet verwijderen.

Dolphin WebDAV

Om te achterhalen wie en wanneer toegang had tot de WebDAV map, controleer je het toegangs logboek:

dany@pindabook:~> sudo tail /var/log/lighttpd/access.log
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:04:54 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:05:04 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:05:14 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:05:24 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:05:34 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:05:44 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:05:54 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:06:04 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:06:14 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"
2a02:a03f:5ca7:c600:250:b6ff:fe6b:4f28 pindabook.local test [24/Feb/2018:18:06:24 +0100] "PROPFIND /webdav HTTP/1.1" 301 0 "-" "Mozilla/5.0 (X11; Linux x86_64) KHTML/5.32.0 (like Gecko) Konqueror/5.32"

Wil je de WebDav map ook via een andere computer bereiken, vergeet dan niet de HTTP firewall-poort te openen:

dany@pindabook:~> sudo yast2 firewall services add zone=EXT service=service:lighttpd