Webdav

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

WebDAV (z angl. Web-based Distributed Authoring and Versioning) je rozšíření HTTP protokolu verze 1.1 o metody COPY, LOCK, MKCOL, MOVE, PROPPATCH a UNLOCK, které umožňuje pracovat se soubory na WWW serveru.

Výhodou tohoto protokolu je, že využívá stejný HTTP protokol, jako webové služby a porty 80 (HTTP) a 443 (HTTPS) jsou - na rozdíl od portů, přes které fungují jiné komunikační protokoly - obvykle průchozí, aby se uživatelé mohli z vnitřní sítě dostat k webovým stránkám. Proto umoňuje přenášení souborů na server i přes relativně striktně nastavený firewall nebo proxy.

Idea řešení, které by umožnilo upravovat webové stránky uživatelem on-line rovnou na serveru byla přítomna od samého počátku vzniku webových služeb, jenže k funkční implementaci byla dlouhá cesta. První verze HTTP protokolu s číslem 0.9 byla zveřejněna r. 1991, ale první konkrétní návrhy k tomu jaké metody do něj implementovat aby to bylo možné učinil Jim Whitehead až r. 1996. Do té doby se upravené soubory uploadovaly na server prostřednictvím FTP protokolu.

FTP protokol, určený k přenášení souborů po síti, je starší než HTTP protokol. Jeho návrh pochází již z r. 1986 - z doby, kdy ještě nikoho nenapadlo uvažovat o potencionálních možnostech zneužití. Veškerá data se jím přenášela v čitelné podobě - včetně přihlašovacích údajů, takže případnému škůdci stačilo kdekoliv po trase odchytit dostatečné množství paketů a pak v nich tyto údaje vyhledat.

V těch dřevních dobách webu kdy byl editor webových stránek součástí některých prohlížečů se k přenosu souborů z klienta na server zpočátku využíval pouze integrovaný FTP klient. Protože v r. 1997 ještě neexistovala pro WebDAV žádná funkční implementace, byla specifikace FTP protokolu rozšířena o přidané bezpečnostní prvky. Teprve zhruba od r. 2003 začaly některé webové servery nabízet jako alternativu pro upload souborů také WebDAV. Ovšem v té době už byl integrovaný wysiwyg editor pouze v Mozille - poslední verze, která jej ještě obsahovala (1.7.13) byla vydaná na jaře 2008.

WebDAV měl význam především pro wysiwyg editory HTML stránek, jako byla Amaya, Frontpage nebo editor v Mozille, ovšem ty se hodily pouze pro správu statického webu. Internetový boom v závěru 20. století ale vynesl do popředí weby s dynamicky generovaným obsahem, kde finální podoba webové stránky závisela na interpretaci kódu stránky na straně serveru v kombinaci s renderovacími schopnostmi jádra webového prohlížeče. Přístup k souborům s využitím WebDAVu byl, především kvůli potenciálnímu riziku při zneužití - zbytečný. A většina programátorů webový aplikací byla zvyklá používat FTP klienta, takže o to ani nebyl příliš zájem.

WebDAV se stal zajímavou alternativou až s nástupem chytrých mobilních zařízení s trvalým přístupem s internetové síti. A to pro svůj potenciál využitelný ke sdílení uživatelských dat mezi pracovní stanicí a mobilním telefonem.


Popis metod

PROPFIND
vytáhni vlastnosti souboru
PROPATCH
změň resp. zruš nějakou vlastnost souboru při atomické operaci
MKCOL
vygeneruj obsah adresáře
COPY
zkopíruj soubor z jedné adresy na druhou
MOVE
přenes soubor z jedné adresy na druhou
LOCK
zamkni soubor
UNLOCK
odstraň zámek

Server

Protože je WebDAV pouhé rozšíření HTTP protokolu, je většinou implementován jako doplněk webového serveru.

WsgiDAV
Jednoduchý WebDAV server implementovaný přes webový server WSGI, napsaný v pythonu - což jsou objekty které umožňují integrovat webové služby do aplikací psaných v tomto skriptovacím jazyce. Stejné objekty využívají jako základ pro komunikaci s klienty i jiné specializované servery, jako je např. Radicale - server pro správu kalendářů, který používá CalDAV a CardDAV rozšíření HTTP protokolu. Tento WebDAV server ale není součástí repozitářů Debianu
Apache
Je nejrozšířenější webový server. Aby bylo možné k adresáři publikovanému přes web přistupovat přes WebDAV musí být zaveden modul mod_dav a DAV přístup explicitně pro něj povolen.
lighttpd
Je webový server, který je navržen pro vysoký výkon. Rozšíření pro WebDAV se u něj aktivuje zavedením modulu webdav, který je u Debianu v instalačním balíčku lighttpd-mod-webdav
Nginx
Je webový server, který byl podobně jako lighttpd navržen tak, aby zvládal vysoké počty klientů. Mimo jiné může fungovat také jako reverzní HTTP proxy, nebo proxy server pro IMAP/POP3 pro různé domény. Podpora pro WebDAV se u něj aktivuje při kompilaci parametrem --with-http_dav_module, proto je u Debianu nutné nainstalovat verzi serveru, která ji má zakompilovanou a to buď nginx-full nebo nginx-extra.

Autentizační mechanismus

WebDAV je je protokol, který sám o sobě žádný autentizační mechanismus neřeší. Proto by nemohl do adresáře strkat své soobory každý náhodný kolemjdoucí, musí být přístup podmíněný nějakým autentizačním mechanismem.

Za předpokladu, že se provádí přesměrování do cílového adresáře podle uživatele je ověření uživatele doḱonce nezbytně nutné.

basic

http://en.wikipedia.org/wiki/Basic_access_authentication

Autentizační mechanismus basic je v podstatě jednoduché ověření přístupu pomocí kombinace jména a hesla. Při každém přístupu do chráněného adresáře vyzve webový server server klienta, aby poslal v rámci požadavku na stránku také autentizační informace - jméno a heslo. Ten je zakóduje metodou Base64 a odešle v rámci HTTP požadavku.

Nevýhodou tohoto autentizačního mechanismu je, že uživatelské jméno a heslo putuje sítí v otevřeném formátu a pokud není spojení mezi serverem a klientem šifrované přes SSL, může snadno dojít ke kompromitaci.

O tom, jak snadno lze tyto údaje získat se lze přesvědčit dekódováním řetězce odesílaného v HTTP hlavičce na server pomocí openssl

echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ==" | openssl enc -base64 -d

otevřený protokol jako FTP, umí-li však systém na klientském zařízení svou komunikace s webovým serverem šifrovat přes SSL, lze považovat tento přenos dat za dostatečně bezpečný. A protože SSL šifrování dnes zvládají prakticky všechny používané platformy - včetně těch mobilních - začalo se WebDAVU využívat pro sdílení souborů s osobními daty, jako jsou sdílené kalendáře, adresáře, poznámky aj.

digest

ldap

Konfigurace webového serveru Apache pro multiuživatelský WebDAV přístup

Poznámka
root@stroj:~# cat /etc/apache2/conf-available/dav.conf 
RewriteEngine On

<Directory /srv/dav>
         DAV On
         DirectoryIndex neverused.neverused
</Directory>

<Location /webdav>
        ...
        Require valid-user
</Location>

RewriteRule ^/webdav/(.*)$ /srv/dav/%{LA-U:REMOTE_USER}/$1
Část ukázkového konfiguračního souboru, vyznačená ... obsahuje konfiguraci zvoleného autentizačního mechanismu. Viz následující odstavce věnované konfiguracím autentizačního mechanismu.


Použití atentizace typu basic

Musí být zaveden modul auth_basic

Poznámka
<Location /webdav>
        AuthType Basic
        AuthName "WebDAV"
        AuthBasicProvider file
        AuthUserFile /etc/dav/htpasswd.file
        Require valid-user
</Location>

Pro vytvoření souboru pro uložení hesla lze použít utilitu htpasswd, která je u Debianu součástí instalačního balíčku apache2-utils. Kde a s jakým jménem bude soubor uložen, je vcelku jedno.

Poznámka
root@stroj~# htpasswd -c -m /etc/dav/htpasswd.file user1
root@stroj~# htpasswd -m /etc/dav/htpasswd.file user2
...

Použití atentizace typu digest

Musí být zaveden modul auth_digest

Poznámka
<Location /webdav>
        AuthType Digest
        AuthName "WebDAV"
        AuthDigestDomain webdav
        AuthDigestProvider file
        AuthUserFile /etc/dav/htdigest.file
        Require valid-user
</Location>

Pro vytvoření souboru s hashovanou kombinací hesla a domény lze použít utilitu htdigest, která je stejně jako utilita htpassword u Debianu součástí instalačního balíčku apache2-utils. Kde a s jakým jménem bude soubor uložen, je vcelku jedno. Musí být splněna pouze ta podmínka, že použitý realm v souboru odpovídá hodnotě parametru AuthName a hodnota parametru AuthDigestDomain je shodná s hodnotou elementu Location

Poznámka
root@stroj~# htdigest -c -m /etc/dav/htdigest.file WebDAV user1
root@stroj~# htdigest /etc/dav/htdigest.file WebDAV user2
...

Klienti

Klienti pro MS Windows

Připojení na WebDAV server je možné rovnou z MS systémů, ale bohužel je to jedna velká tragédie, protože každá verze potřebuje přiohnout trochu jiným způsobem záznam v registru. Proto se také na MS Windows WebDAV moc nepoužívá.

Alternativní připojení na WebDAV server nabízejí různé alternativní aplikace třetích stran - vesměs placené. Existuje však akceptovatelná alternativa, poměrně slušně fungující, kterou je plugin do poměrně rozšířeného souborového manažeru Total Commander

Upozornění WebDAV připojený přes TC nepoužívá systémového webdav klienta, proto není namapován na žádné lokální zařízení! Chcete-li mít adresář sdílený WebDAV namapované jako sdílený disk, musíte podstoupit následující martyrium, které ne vždy vede k úspěchu, neboť zde záleží také konfiguraci WebDAV serveru.

Problémy s připojením na WebDAV u MS Windows

Připojení na WebDAV server, které bývalo u MS Windows 2000 relativně jednoduchou operací, je verze od verze nástupnických MS Windows jeden velký opruz. Microsoft u svého klienta iplementoval u WebDAVu bezpečnější typ autentizace digest poněkud nestandardním způsobem - kontrolovaný kontrolní součet totiž zahrnuje i doménové jméno klienta. Takže v praxi je nepoužitelná, neboť správce by musel při zavádění uživatele znát všechna doménová jména strojů ze kterých by na server přistupoval a na to aby měl po ruce křišťálovou kouli.

Upozornění Neautorizovaný WebDAV je u Windows XP bezproblémový, ovšem při pokusu o autorizaci vás čeká zrada! Při autorizovaném připojení totiž jejich klient nepracuje korektně s přihlášení a posílá uživatelské jméno (login) včetně doménového jména. Jedním z možných řešení je zavést do autorizace také uživatelská jména včetně domény hostitele. Viz níže
hostitel\\login

Při zadávání přes příkazovou řádku nezapomeňte, že je třeba zabránit shellu aby zpětná lomítka interpretoval, tedy...

 user@stroj:~$ htpasswd -c /cesta_k/autorizačnímu_souboru "hostitel\\\\login"

Naštěstí se jí bylo možné u MS Windows XP vyhnout změnou hodnoty klíče UseBasicAuth z 0 na 1, kterým se změnilo nastavení výchozího autentizačního mechanizmu na basic.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"UseBasicAuth"=dword:00000001

Soubor:WebDav workaround XP.reg

Připojení bylo možné realizovat dvěma způsoby.

http://hostitel/sdílený_adresář

nebo

\\hostitel\sdílený_adresář

Windows XP totiž obsahovaly dva WebDAV klienty - "mini-redirector" a "webfolders client", a každý z nich fungoval trochu jinak.

U dalších verzí se v Microsoftu sice poučili a pro MS Windows Vista a výš nastavili výchozí hodnotu klíče BasicAuthLevel na 1, jenže pouze pro komunikaci zabezpečenou přes SSL. A pro nešifrovanou komunikaci klient stále trval na autentizaci typu digest. Aby bylo možné používat autentizační mechanismus basic i u HTTP protokolu je opět nutné hrábnout do registru a změnit hodnotu klíče BasicAuthLevel na 2.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"BasicAuthLevel"=dword:00000002

Soubor:WebDav workaround Vista.reg

0
Autentizace typu basic je vypnuta. Lze použít pouze autentizaci typu digest
1
Autentizace typu basic se použije pouze v případě, že je komunikace WebDAV serverem šifrovaná (přes HTTPS)
2 nebo vyšší
Autentizace typu basic se použije jak v případě šifrované komunikace (HTTPS), tak nešifované (HTTP)

Navíc, v systému zůstal k dispozici již pouze jeden WebDAV klient - mini-redirector takže u Windows Vista bylo nutné připojit sdílený adresář pouze s následující syntaxí:

\\hostitel\sdílený_adresář
Upozornění V případě že se pokusíte připojit sdílený adresář ve Windows Vista stejným způsobem jako v XP, se vám může stát, že to shodí hlavní proces exploreru a ten sebou vezme sebou celý OS!

Může to mít souvislost s činností antivirové ochrany. Nám se takto hroutil stroj s antivirovým programem NOD32, který se nejspíš pokoušel o analýzu HTTP protokolu přes který WebDAV běží.

Poznámka U Windows Vista, je-li WebDAV autorizován přes SSL pak je třeba do cesty doplnit že má jít přes SSL
\\hostitel@SSL\sdílený_adresář


Linux

Připojení WebDAV pod linuxem je záležitostí naprosto triviální, pokud máte v jádře zaveden modul fuse (což je dnes většinou naprosto běžná věc) a nainstalovány utility pro davfs (v Debianu aktuálně instalační balík davfs2). Pro připojení pak stačí sdílený adreář namountovat příkazem:

root@stroj:~# mount -t davfs http://hostitel/sdílený_adresář bod_připojení

resp.

user@stroj:~$ sudo mount -t davfs http://hostitel/sdílený_adresář bod_připojení

V případě že je WebDAV autorizovaný se vás systém během procesu připojení zeptá na uživatelské jméno a heslo.

Pokud chcete aby se adresář připojoval ihned po startu, nebo aby jej bylo možné připojovat pod běžným uživatelem, je třeba nastavit mountování v souboru /etc/fstab, viz příklad:

http://hostitel/sdílený_adresář bod_připojení davfs user,no_netdev,use_proxy 0 0
Poznámka Adresář sdílený přes WebDAV neumožňuje pracovat s linky a to jak "tvrdými" tak se symlinky

Klienti pro linux

Klientskou aplikací pro linuxovou příkazovou řádku je např. cadaver ( http://www.webdav.org/cadaver/ ). Hodí se zvláště v případě, kdy uživatel nemá práva k použití příkazu mount.

Mac OS X

Android

BlackBerry

Připojení na jiných OS

http://www.cer.jhu.edu/index.cfm?pageID=326
Postup připojení adresáře sdíleného přes WebDAV pod Mac OS X
http://ajaxian.com/archives/javascript-webdav-client
Javascriptový klient pro použití přes AJAX, v některých prohlížečích však nemusí fungovat. Implementací tohoto klienta je Ajaxfilebrowser http://www.webdavsystem.com/ajaxfilebrowser Na jeho stránkách je k dispozici i online demo.

Externí linky

http://en.wikipedia.org/wiki/WebDAV - Wikipedia

http://interval.cz/clanky/zaklinadlo-jmenem-webdav/ - série článků na interval.cz