Il sito di Giorgio Zarrelli

...because open source matters

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri

WebDAV - Pratica

E-mail Stampa PDF

Le estensioni WebDAV rendono Apache più di un web server dinamico, trasformandolo in uno strumento di editing collaborativi o forse in qualcosa di più. Da file system distribuito a CVS, a ciò che l’ingegno vi porta a creare, le applicazioni pratiche di WebDAV sono notevoli. Vediamo quindi come implementarle su Apache

Pubblicato per gentile concessione della casa editrice Infomedia www.infomedia.it.

Uno dei problemi più sentiti da chi si trova ad amministrare un server web con utenti poco esperti consiste nella difficoltà di questi ultimi nell'utilizzare degli strumenti semplici e al contempo sicuri per aggiornare le pagine del proprio sito. Provvediamo subito ad abbattere questa barriera. Gli utenti del nostro sito potranno utilizzare il Drag&Drop di Windows per trascinare i file del proprio sito sul loro spazio web, come se questo fosse una cartella del proprio sistema, mentre gli utenti Linux potranno addirittura montare il loro spazio web remoto come se fosse un filesystem locale. E volendo, potrete scrivere il vostro codice PHP direttamente sul server web, modificare pagine,  modificare e cancellare file di ogni tipo.
Il tutto è reso possibile da una estensione del protocollo HTTP/1,1, denominata WebDav, i cui standard potrete approfondire nella RFC 2518 "HTTP Extensions for Distributed Authoring – WEBDAV". In pratica, si tratta di una estensione dedicata all'authoring remoto in cui, in un ambiente collaborativo, diversi autori possono interagire sugli stessi documenti e modificarli. Noi lo utilizzeremo, banalizzandone un poco le potenzialità, come un vero e proprio filesystem remoto, con il quale aggiornare il nostro sito. E di applicazioni che supportano DAV, ce ne sono parecchie, da Internet Explorer 5, a Office 2000, fino a Goliath, un client grafico per Mac, mod_dav, un modulo che implementa WebDav su Apache

Installiamo il modulo mod_dav


Implementare mod_dav su Apache è semplicissimo: ponendo di avere scaricato i sorgenti di Apache dal sito www.apache.org e quelli di mod_dav, il modulo webdav per il server, da  http://www.webdav.org/mod_dav/, utilizzeremo apxs per semplificare il lavoro e non dovremo nemmeno toccare i sorgenti del server web che avrete configurato in fase di installazione di Apache..
Poniamoci nella directory dei sorgenti e decomprimiamo l'archivio di mod_dav, entrando quindi nella directory creata:

tar xvfz mod_dav-1.0.3-1.3.6.tar.gz
cd mod_dav-1.0.3-1.3.6
 
Ora configuriamo i sorgenti di mod_dav utilizzando apxs, compiliamo e installiamo, ipotizzando di avere i sorgenti di apache in /usr/local/apache_1.3.27:


./configure –-with-apxs=/usr/local/apache_1.3.27/bin/apxs
make
make install

Tutto qui: mod_dav è installato senza troppi dolori e basterà riavviare il server per caricare il modulo.

Configuriamo uno spazio WebDAV


Riprendiamo in mano la configurazione del nostro sito e controlliamo che la DocumentRoot sia di libero accesso e introduciamo alcunee modifiche:

<Directory /var/www>

Order deny,allow
allow from all
Options None
DirectoryIndex index.html

</Directory>


DAVLockDB /var/lock/DAV/DAVLockDB

Nella sezione di configurazione del server principale, indichiamo un file che verrà creato da DAV e nel quale potrà segnare i lock sui tutti i file del sito  sui quali andremo a lavorare. Non va creato su partizioni montate su NFS e non deve essere raggiungibile da web.

Alias "/caricamento" "/var/www"

Creiamo un alias che ci consenta di raggiungere il contenuto della DocumentRoot attraverso un contenitore <Location>, configurabile a parte.

<Location /caricamento>

SSLRequireSSL

AllowOverride None

order deny,allow
allow from all

DAV on

Con DAV on abilitiamo DAV per questa directory.

DAVMinTimeout 600

Imponiamo un tempo minimo prima del quale un lock su file non può scadere. Ciò può risultare utile nel caso di sistemi Microsoft che montano spazi DAV come Cartelle Web, imponendo come timeout dei lock a 2 minuti causandoun continuo traffico di rete per imporre i lock sulle  Cartelle Web utilizzate. Impostando un tempo minimo di timeout, le richieste di rilascio dei lock vengono ignorate se il tempo trascorso è inferiore al tempo minimo.

ForceType Text/Plain

Per evitare conflitti fra i moduli php e dav, il che genera l'impossibilità di operare sui file sorgenti php, dato che vengono  interpretati dal primo modulo, mentre si cerca di modificarli attraverso il secondo, forziamo il server a gestire in questa sezione i file php come se fossero semplice testo.

AuthType Digest
AuthName "Privato"
AuthDigestFile /usr/local/apache_1.3.27/auth/digest

<Limit PUT DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
require user dav_user     
</Limit>

Limitiamo l'uso dei metodi più pericolosi solo all'utente autenticato dav_user. Da notare che lasciando di libero utilizzo il metodo PROPFIND, che consente di scoprire le proprietà delle risorse DAV, potremmo esporci a un denial of service causato da un utilizzo ricorsivo infinito di questo metodo sull'intero namespace sul quale è applicabile. E' altresì intuitivo che metodi HTTP come DELETE, PUT e MOVE sono decisamente pericolosi dato che mettono l'utente in condizione di manipolare i file presenti nella directory. Se avete delle pagine in php, però, che vi costringono a forzare il tipo testo e quindi a mostrare i file come se fossero di questo tipo, consentendo quindi di vedere i sorgenti dei file php, vi converrà mettere sotto chiave l'intera <Location> per evitare che qualcuno avendovi accesso possa leggere ciò che non dovrebbe.

</Directory>

Aggiungiamo l'utente dav_user al nostro file di digest, riavviamo il server, e usiamo un client abilitato alle connessioni DAV. Per gli utenti Windows, basterà collegarsi a Internet e cercare di aprire come Cartella Web (fate attenzione al check box) la url che abbiamo abilitato, ovvero la DocumentRoot del sito. Per gli utenti Linux, e di altri sistemi, come Mac, ci sono altri client a disposizione. Possiamo usare Konqueror con la seguente sintassi:

webdav://www.miositodiesempio.it/caricamento

Oppure installare un client quale Cadaver:

tar xvfz cadaver-0.20.5.tar.gz
cd cadaver-0.20.5
./configure –-with-ssl
make
make install


Image
Ecco come si presenta il nostro sito di esempio, visto da Internet Explorer: una serie di cartelle da trascinare o modificare













Ora che abbiamo il client a disposizione, colleghiamoci, autentichiamoci, diamo un'occhiata alle collezioni (directory) e copiamo un file da una collezione all'altra.

cadaver https://www.miositodiesempio.it/caricamento
WARNING: Untrusted server certificate presented:
Issued to: My Unit, My Web Server Corp., Milan, MI, IT
Issued by: My Unit, My Web Server Corp., Milan, MI, IT
Do you wish to accept the certificate? (y/n) y
Authentication required for DAV on server `www.miositodinomedifatto.it':
Username: dav_user
Password:
dav:/caricamento/>


dav:/caricamento/> ls
Listing collection `/caricamento/': succeeded.
Coll:  mia_dir                                 0  Feb 10 13:43
Coll:  usr                                     0  Feb 12 12:09
       index.php                              32  Feb 12 12:20
       rubrica.php                          1761  Feb 11 02:56

Creiamo una directory:

dav:/caricamento/> mkcol prova_dir
Creating `prova_dir': succeeded.
dav:/caricamento/>

Adesso, spostiamoci dentro un file di esempio rubrica.php

dav:/caricamento/> move rubrica.php prova_dir
Moving `/caricamento/rubrica.php' to `/caricamento/prova_dir/rubrica.php':  succeeded.

Controlliamo che sia stato effettivamente spostato:

dav:/caricamento/>   ls prova_dir
Listing collection `/caricamento/prova_dir/': succeeded.
       rubrica.php                          1761  Feb 11 02:56
dav:/caricamento/>


Image
Prendiamo una cartella qualsiasi dal nostro desktop e trasciniamola sul server. Sembra proprio di copiare una directory da un ramo all’altro del nostro disco locale












Provate ad aprire il vostro navigatore e puntarlo alla URL www.miositodiesempio.it/prova_dir/rubrica.php: ritroverete il vostro file online, solo che l'avrete spostato in quella posizione, usando il protocollo HTTP/1.1, qualche estensione e una manciata di XML.

Volete provare a editare online il vostro file? Date il comando:

edit rubrica.php



Image
Ecco la nostra cartella sul server. Niente di più facile per aggiungere documenti e pagine web a un sito













e il gioco è fatto. Ma forse è più semplice usare qualche applicazione DAV-enabled che con il Drag&Drop renda tutto più semplice, o carichi direttamente nell'editor, basti pensare a OpenOffice, il file da editare che potrete poi salvare cliccando sull'icona a dischetto, come per una risorsa locale.

Conclusioni


Una volta installato e compreso nel suo utilizzo, potrete usare Apache con mod_dav per una quantità di operazioni. L’applicazione più banale ma anche più diretta consente di collegare come dischi remoti le parti di un sito web a maggiore frequenza di aggiornamento e lavorarci direttamente, oppure dandolo in mano a chi di grafica web ne sa parecchio, ma si troverebbe impacciato a gestire gli aggiornamenti direttamente via scp. Insomma, non vi è ragione per non provare a installare mod_dav: non complica i vostri sorgenti, non aumenta, se gestito correttamente, in maniera significativa i rischi alla sicurezza del vostro server e apre una serie di possibili applicazioni che potrete implementare con soddisfazione soprattutto in un ambiente di produzione nel quale la semplificazione nell’interazione con il materiale ondine aumenta drammaticamente la produttività individuale e di gruppo, al di là delle specifiche competenze tecniche


Bibliografia


[1] HTTP Extensions for Distributed Authoring – WEBDAV. RFC 2518 – http://www.ietf.org/rfc/rfc2518.txt
[2] Versioning Extensions to WebDAV. RFC 3253 – http://www.ietf.org/rfc/rfc3253.txt
[3] Hypertext Transfer Protocol – HTTP/1.1. RFC 2616  – http://www.ietf.org/rfc/rfc2616.txt
[4] E. James Whitehead, JR., Meredith Wiggins, "WEBDAV: IETF Standard fo Collaborative Authoring on the Web" IEEE Internet Computing, September/October 1998, pagine 34-40 - . http://www.ics.uci.edu/pub/ietf/webdav/intro/webdav_intro.pdf.
[5] G. Zarrelli Web Dav – Web Distributed Authoring and Versioning. Login

Risorse web


http://www.webdav.org/
http://dav.sourceforge.net/


Ultimo aggiornamento Giovedì 02 Giugno 2005 10:43  


Notizie in breve

E' uscito il mio nuovo libro "Linux. Dai fondamenti alle Applicazioni".
E' una guida semplice, che prende per mano l'utente inesperto e lo porta velocemente a configurare un desktop Linux.
Leggi tutto...