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
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:
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

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/>

Prendiamo una cartella qualsiasi dal nostro desktop e trasciniamola sul server. Sembra proprio di copiare una directory da un ramo allaltro 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

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
[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/
| Succ. > |
|---|





