Secure WebDAV : Secure WebDAV Pisapia Arturo Luigi – artpisapia79@blu.it
Scanzio Stefano – zioskenz@inwind.it
WebDAV: Introduzione : WebDAV: Introduzione Cenni preliminari ad Hypertext Transfer Protocol (HTTP)
WebDAV
HTTP in breve (1) : HTTP in breve (1) HyperText Transfer Protocol (RFC 2616)
Protocollo per l’accesso a risorse WWW
Il client invia una richiesta al server
Il server esegue la richiesta e ritorna il risultato
WebDAV: Introduzione
HTTP in breve (2) : HTTP in breve (2) Client Server Marshal request Transmit request Internet Unmarshal request Perform request Marshal response Transmit response Unmarshal response WebDAV: Introduzione
HTTP in breve (3) : Web Server HTTP in breve (3) WebDAV: Introduzione
Formato HTTP request : Formato HTTP request Formato della request :
{method} {Request-URI} {protocol version}
Esempio:
GET /users/ejw/flyer.doc HTTP/1.1
Una serie di headers:
{header}: {value}
RFC 822 (email) style header encoding
Esempio:
Content-Type: text/html
Un request body opzionale
Separato dagli headers da un
Un sequenza di 8-bit bytes (ottetti)
WebDAV: Introduzione
Formato HTTP response (1) : Formato HTTP response (1) Molto simile al formato della request:
Una linea di Stato:
{protocol version} {status code} {status phrase}
Codici di stato:
1xx: Informational
2xx: Successful
3xx: Redirection
4xx: Client error
5xx: Server error
Esempio:
HTTP/1.1 200 OK WebDAV: Introduzione
Formato HTTP response (2) : Formato HTTP response (2) Una serie di headers
Stesso formato della request
Un body della risposta
Stesso formato della request
WebDAV: Introduzione
Esempio HTTP : Esempio HTTP GET / HTTP/1.1
Host: www.webdav.org
Content-Length: 0
HTTP/1.1 200 OK
Date: Wed, 25 Apr 2001 22:58:22 GMT
Server: Apache
Last-Modified: Thu, 19 Apr 2001 05:30:49 GMT
ETag: "30e7da-2f9d-3ade7809"
Accept-Ranges: bytes
Content-Length: 12189
Content-Type: text/html
WebDAV risorsas Request Response WebDAV: Introduzione
Nozioni importanti di HTTP 1.1 : Nozioni importanti di HTTP 1.1 Le richieste sono trasmesse su TCP/IP
La connessione è lasciata aperta alla fine di una richiesta (request)
Utilizza la rete con efficienza
Protocollo Stateless: tutte le informazioni necessarie per rispondere a una richiesta sono contenute nella request
Entity tag è un identificatore per lo stato della risorsa
Se la risposta alla GET cambia, cambia anche l’Etag
WebDAV: Introduzione
Metodi HTTP (1) : Metodi HTTP (1) Le operazioni supportate da HTTP includono:
GET – legge una risorsa
HEAD – ritorna solo gli headers di una risorsa
Utile per il caching (si ottiene velocemente l’entity tag)
OPTIONS – metodi supportati
POST – protocol-tunneling
PUT – scrive una risorsa
DELETE – elimina una risorsa WebDAV: Introduzione
Metodi HTTP (2) : Metodi HTTP (2) Sebbene HTTP 1.1 può usare PUT e DELETE, viene utilizzato principalmente come protocollo read-only
PUT e DELETE non sono utilizzati ampiamente dai client
WebDAV: Introduzione
WebDAV : WebDAV Distributed Authoring and Versioning on the World Wide Web
Un'architettura per la realizzazione di strumenti interoperabili per l'authoring e il versioning distribuito sul web
http://www.webdav.org/
http://www.ics.uci.edu/pub/ietf/webdav/
WebDAV: Introduzione
WebDAV e HTTP : WebDAV e HTTP WebDAV è un'estensione di HTTP
Aggiunge proprietà e collezioni al modello HTTP
Fornisce comandi per
Proprietà - list, add, remove
Operazioni sui nomi delle risorse - move, copy
Controllo di sovrascrittura - lock, unlock
Collezioni - mkcol
WebDAV: Introduzione
Utilizzo di WebDAV : Utilizzo di WebDAV Dovete scrivere un documento da mettere disponibile sulla rete
Aprite il vostro Word Processor preferito e scrivete
Salvate una copia sul Web
Decidete di includere un altro autore
Attivate la possibilità di condivisione del documento
Usando lo stesso Word Processor, continuate a scrivere sul documento
L'altro autore può lavorare indipendentemente da voi sul documento
WebDAV: Introduzione
Ciclo d'uso di WebDAV : Ciclo d'uso di WebDAV Client Server File… Open LOCK Blocca la risorsa PROPFIND GET Manda il contenuto al client Edit PUT File… Save Exit UNLOCK Salva il contenuto modificato Sblocca la risorsa Ne manda
proprietà al client WebDAV: Introduzione
Possibili usi di WebDAV : Possibili usi di WebDAV Un protocollo per l'authoring distribuito
Un file system sul Web, con caratteristiche positive in caso di grandi latenze
Un meccanismo integrato per accedere a repositories
Document management system, configuration management system, file system, ecc.
Un protocollo per la gestione di team distribuiti nel software engineering e nel content management
WebDAV: Introduzione
Aspetti di WebDAV : Aspetti di WebDAV Infrastruttura di collaborazione
Infrastruttura per la memorizzazione di metadata
Infrastruttura per la gestione di spazi di nomi
Infrastruttura per il Versioning
Infrastruttura per l'Access Control
Infrastruttura di ricerca – DASL (Distributed Authoring Searching and Locating group)
WebDAV: Introduzione
Aspetti di WebDAV (1) : Aspetti di WebDAV (1) Infrastruttura di collaborazione
Attraverso il meccanismo di locking
Permette l'authoring collaborativo remoto di pagine Web e di qualunque tipo di risorsa e ogni formato di dato
Infrastruttura per la memorizzazione di metadati
E' possibile creare, modificare, rimuovere e accedere a proprietà (coppie arbitrarie)
I valori delle proprietà sono frammenti XML WebDAV: Introduzione
Aspetti di WebDAV (2) : Aspetti di WebDAV (2) Infrastruttura per la gestione di spazi di nomi
Copy,Move di risorse singole e di gerarchie di strutture
Creare e modificare nuove collezioni di risorse
WebDAV: Introduzione
Aspetti di WebDAV (3) : Aspetti di WebDAV (3) Il Vesioning è una parte fondamentale di WebDAV
Infrastruttura per il Versioning
check-out, check-in, storia del grafo delle versioni, commenti, accesso alle vecchie versioni, operazioni di configuration management
Infrastruttura per l'Access Control
Access Control: la possibilità di controllare in remoto chi può leggere e scrivere una risorsa
La possibilità di specificare gruppi di collaborazione e gruppi di diritti WebDAV: Introduzione
Aspetti di WebDAV (4) : Aspetti di WebDAV (4) Infrastruttura di ricerca
Ricerca di risorse con una data proprietà, o un dato valore
Ricerca per sottostringhe all'interno di una risorsa o di una collezione di risorse
L’obiettivo della ricerca può essere una collezione di risorse,una gerarchia di risorse o un intero server
WebDAV: Introduzione
WebDAV Object Model : WebDAV Object Model Risorsa Web Corpo Proprietà
Coppie (nome, valore) WebDAV: Introduzione
Metodi WebDAV (1) : Metodi WebDAV (1) Prevenzione da sovrascritture:
LOCK – evita che chi non possiede il lock in scrittura possa modificare la risorsa
UNLOCK – rimuove il lock
Metadata Management:
PROPFIND – legge le proprietà di una risorsa
Allprop – tutte le proprietà
Propname – solo i nomi
Prop – solo le proprietà desiderate
PROPPATCH – scrive le proprietà di una risorsa WebDAV: Introduzione
Metodi WebDAV (2) : Metodi WebDAV (2) Namespace Management
COPY – copia una risorsa
MOVE – sposta una risorsa
MKCOL – crea una nuova collezione
WebDAV: Introduzione
Metodi WebDAV (3) : Metodi WebDAV (3) LOCK
UNLOCK
COPY
MOVE*
DELETE*
MKCOL*
(PUT*) GET
PUT* Risorsa Web Corpo Proprietà
Coppie (nome, valore) * - dipendono da LOCK PROPFIND
PROPPATCH* WebDAV: Introduzione
Webdav: Proprietà e collezioni : Webdav: Proprietà e collezioni Proprietà Live e Non Live
Le collezioni
Proprietà (1) : Proprietà (1) Le proprietà sono coppie (nome, valore) che contengono informazioni su una risorsa
Il nome è sempre un URI (universalità e generalità) WebDAV: Proprietà
Proprietà (2) : Proprietà (2) Le proprietà possono essere:
Live: proprietà di cui è il server a mantenere coerenza obbligando sintassi e semantica. Ad esempio: data di ultima modifica
Non-live: proprietà in cui sintassi e semantica sono fornite dal client. Non esiste obbligo di coerenza. Ad esempio: autore del documento
Vantaggi: sia il server che il client possono definire nello stesso modo delle proprietà, e ciascuno si gestisce e tiene aggiornate le proprie (flessibilità)
WebDAV: Proprietà
Proprietà (3) : Proprietà (3) I valori delle proprietà sono frammenti ben-formati in XML
estensibili, internazionali (grazie a Unicode), permettono valori strutturati, permettono l'inserimento senza fatica “Plug-and-Play” di strutture RDF (Resource Description Framework)
RDF è un network-based data model con una rappresentazione XML del modello WebDAV: Proprietà
Collezioni (1) : Collezioni (1) Una collezione è una lista di URI delle risorse che ne fanno parte
Svolge il compito di raggruppamento che hanno le directory nei file system, a parte che:
Una risorsa può avere più URI e quindi appartenere a più collezioni
Non c'è nessuna implicazione sulle modalità di memorizzazione fisica delle risorse sul server
E' possibile definire collezioni ordinate, indipendentemente dal valore di qualunque proprietà WebDAV: Collezioni
Collezioni (2) : Collezioni (2) Le risorse forniscono la possibilità di navigare gerarchicamente o meno tra esse
Permettono il supporto di finestre di dialogo tipo "File:Open" o "File:Save as" anche su server di rete
WebDAV: Collezioni
Webdav: metodi HTTP per l’authoring distribuito : Webdav: metodi HTTP per l’authoring distribuito Propfind, Proppatch
Mkcol,Copy e Move
PROPFIND (1) : PROPFIND (1) Legge le proprietà su una risorsa
tutti i nomi e valori delle proprietà
Tutti i nomi e proprietà specificati nella richiesta
Solo una lista di nomi di proprietà
WebDAV: Metodi
PROPFIND (2) : PROPFIND (2) Elenca i membri di una collezione
L'intestazione Depth della richiesta permette di specificare quanti livelli mostrare:
Depth: 1 - La collezione e i suoi membri
Depth: Infinity - La collezione, i suoi membri, i loro membri ecc ricorsivamente.
WebDAV: Metodi
Sintassi PROPFIND (1) : Sintassi PROPFIND (1) Richiesta:
PROPFIND “risorsa della quale si vogliono conoscere delle o tutte le proprietà “ HTTP/1.1
Host: “indirizzo WWW dell’host”
Content-Type: “content-type nel formato MIME”
Content-Length: “lunghezza di questo messaggio”
…resto della richiesta PROPFIND in XML
Si noti che nel body XML vi sono indicate all’interno del tag prop le proprietà che si vogliono vedere o se non sono indicate per default si intende tutte
WebDAV: Metodi
Sintassi PROPFIND (2) : Sintassi PROPFIND (2) Risposta:
HTTP/1.1”codice di stato della risposta”
Content-Type: “content-type nel formato MIME”
Content-Length: “lunghezza di questo messaggio”, si noti che le xxxx negli esempi vi sono solo perché non abbiamo inserito questo dato
…resto della risposta PROPFIND in XML
Nel codice XML vengono restituiti tutti i codici di stato dovuti alla richiesta delle proprietà all’interno del tag propstat, che contiene anche il tag prop il quale a sua volta contiene le proprietà di interesse
WebDAV: Metodi
PROPFIND: richiesta : PROPFIND: richiesta PROPFIND /demo.txt HTTP/1.1
Host:www.foo.bar
Content-Type: text/xml; charset=“utf-8”
Content-Length: 160
WebDAV: Metodi
PROPFIND: risposta : PROPFIND: risposta HTTP/1.1 207 Multi-Status
Content-Type: text/xml; charset=“utf-8”
Content-Length: 321
http://www.foo.bar/demo.txt
HTTP/1.1 200 OK
"10598798c153be1:a82"
text/plain
WebDAV: Metodi
Esempio PROPFIND (3) : Esempio PROPFIND (3) Si noti che nell’esempio vengono richieste due particolari proprietà: l’etag e il content type
La scrittura charset=“utf-8” indica il set di caratteri utilizzato che si riferisce alle specifiche ISO 10646
WebDAV: Metodi
PROPPATCH : PROPPATCH Crea e rimuove proprietà da una risorsa
Le direttive di creazione o rimozione sono eseguite atomicamente ( in modo da assicurare che non avvengano stati inconsistenti)
Permette di aggiungere o rimuovere membri da una collezione
WebDAV: Metodi
Sintassi PROPPATCH (1) : Sintassi PROPPATCH (1) Richiesta:
PROPPATCH “risorsa alla quale si vogliono cambiare le proprietà “ HTTP/1.1
Host: “indirizzo WWW dell’host”
Content-Type: “content-type nel formato MIME”
Content-Length: “lunghezza di questo messaggio”
…resto della richiesta PROPPATCH in XML
È importante notare che all’interno del codice XML vi è una o più URI che identificano dove stanno le proprietà della risorsa che si vogliono andare a modificare, come si può notare nell’esempio proposto
WebDAV: Metodi
Sintassi PROPPATCH (2) : Sintassi PROPPATCH (2) Risposta:
HTTP/1.1”codice di stato della risposta”
Content-Type: “content-type nel formato MIME”
Content-Length: “lunghezza di questo messaggio”, si noti che le xxxx negli esempi vi sono solo perché non abbiamo inserito questo dato
…resto della risposta PROPPATCH in XML
Nel codice XML vengono restituiti tutti i codici di stato che si sono verificati dopo la modifica delle proprietà, ognuna delle quali è contenuta in un tag propstat
WebDAV: Metodi
PROPPATCH: richiesta : PROPPATCH: richiesta PROPPATCH /bar.html HTTP/1.1
Host: www.foo.com
Content-Type: text/xml; charset="utf-8"
Content-Length: 283
xmlns:Z="http://www.seclabX.it/webDAV/v09/">
Arturo Pisapia
Stefano Scanzio
WebDAV: Metodi
PROPPATCH: risposta (1) : PROPPATCH: risposta (1) HTTP/1.1 207 Multi-Status
Content-Type: text/xml; charset=“utf-8”
Content-Length: xxxx
xmlns:Z="http://www.seclabX.it/webDAV/v09/">
http://www.foo.com/bar.html
HTTP/1.1 200 OK
WebDAV: Metodi
PROPPATCH: risposta (2) : PROPPATCH: risposta (2) Si nota facilmente che il corpo della risposta 207 che indica Multi-Status è un’entity HTTP text/xml che contiene un set di elementi XML chiamati response che contengono una serie di codici di stato del tipo 200,300,400 e 500 generati durante l’invocazione del metodo
In particolare nell’esempio viene richiesto di impostare la proprietà all’indirizzo http://www.seclabX.it/webDAV/v09 WebDAV: Metodi
Altro Esempio Richiesta (1) : Altro Esempio Richiesta (1) PROPPATCH /bar.html HTTP/1.1 Host: www.foo.com Content-Type: text/xml; charset="utf-8" Content-Length: xxxx Arturo Pisapia Stefano Scanzio WebDAV: Metodi
Altro Esempio Richiesta (2) : Altro Esempio Richiesta (2)
WebDAV: Metodi
Altro Esempio Risposta (1) : Altro Esempio Risposta (1) HTTP/1.1 207 Multi-Status Content-Type: text/xml; charset="utf-8" Content-Length: xxxx http://www.foo.com/bar.html HTTP/1.1 424 Failed Dependency WebDAV: Metodi
Altro Esempio Risposta (2) : Altro Esempio Risposta (2) HTTP/1.1 409 Conflict Copyright Owner can not be deleted or altered.
WebDAV: Metodi
Breve descrizione esempio : Breve descrizione esempio Il client richiede al server di impostare il valore della proprietà http://www.w3.com/standards/z39.50/Authors
Di rimuovere la proprietà http://www.w3.com/standards/z39.50/Copyright-Owner
visto che la proprietà non può essere rimossa viene restituito il codice 409 (Conflict), invece per l’altra richiesta viene restituito il codice 424 (Failed dependency) che ci fa sapere che questa azione sarebbe andata a buon fine se non ci fosse stato il conflitto nella rimozione dell’altra proprietà
WebDAV: Metodi
MKCOL : MKCOL Il comando MKCOL crea una nuova collezione vuota
Può essere invocato con un corpo di richiesta:
Senza corpo di richiesta: crea collezione vuota
Con corpo di richiesta: da come risultato particolare media-type WebDAV: Metodi
Esempio MKCOL : Esempio MKCOL Si crea una collezione chiamata /webdisc/xfiles/ sul server www.server.org
Richiesta: MKCOL /webdisc/xfiles/ HTTP/1.1 Host: www.server.org
Risposta:
HTTP/1.1 201 Created
WebDAV: Metodi
COPY : COPY Duplica risorse, proprietà e collezioni
La copia avviene server-side (non c'è un giro inutile sul client)
Copie per valore, eseguite ricorsivamente attraverso l'intestazione Depth
Permette di controllare la sovrascrittura di proprietà o risorse già esistenti
se una risorsa esiste e l’overwrite header è impostato a “T” allora prima di fare la copy avverra una delete con depth infinity sulla destinazione
Se l’overwrite header è impostato a “F” l’operazione non avrà successo
WebDAV: Metodi
Esempio di Copy con overwrite (1) : Esempio di Copy con overwrite (1) Richiesta:
COPY /~s97074/index.html HTTP/1.1 Host: www.cclinf.polito.it Destination: http://www.sito.it/users/~s97074/index.html
Risposta:
HTTP/1.1 204 No Content
WebDAV: Metodi
Esempio di Copy con overwrite (2) : Esempio di Copy con overwrite (2) La risorsa viene copiata da www.cclinf.polito.it/~s97074/index.html a http://www.example.it/users/~s97074
Lo status code 204 (no content) ci indica che la risorsa preesistente alla destinazione è stata sovrascritta WebDAV: Metodi
Esempio di Copy senza overwrite (1) : Esempio di Copy senza overwrite (1) Richiesta:
COPY /~s97074/index.html HTTP/1.1 Host: www.cclinf.polito.it Destination: http://www.sito.it/users/~s97074/index.html
Overwrite: F
Risposta:
HTTP/1.1 412 Precondition Failed
WebDAV: Metodi
Esempio di Copy senza overwrite (2) : Esempio di Copy senza overwrite (2) Viene svolta la stessa operazione del precedente esempio ma in questo caso viene impostato l’overwrite header a “F” il quale indica che la sovrascrittura non è permessa
Una risposta Precondition failed con codice di stato 412 viene ritornata per indicare che la destinazione non è assente WebDAV: Metodi
MOVE : MOVE Definita come equivalente ad una COPY seguita da una DELETE, eseguiti atomicamente
Ha le stesse opzioni di COPY
Vantaggi:
Permette di rinominare risorse
Permette di spostare le risorse in una differente posizione nella gerarchia
Più efficiente di eseguire copy e delete separatamente
WebDAV: Metodi
MOVE esempio (1) : MOVE esempio (1) Richiesta:
MOVE /~s97074/index.html HTTP/1.1 Host: www.cclinf.polito.it
Destination:
http://www.es.it/users/~s97074/index.html
Risposta:
HTTP/1.1 201 Created Location:
http://www.es.it/users/~s97074/index.html
WebDAV: Metodi
MOVE esempio (2) : MOVE esempio (2) Si muove il contenuto della risorsa individuata dall’URL www.cclinf.polito.it/~s97074/index.html in http://www.es.it/users/~s97074/index.html
Il contenuto della risorsa destinazione sarà sovrascritto se non-null
In questo caso,dal momento in cui non vi era nulla alla destinazione il codice di stato è 201 (created) WebDAV: Metodi
WebDAV: Locking : WebDAV: Locking Lock
Unlock
LOCK (1) : LOCK (1) Il lock definito da WebDAV è solo in scrittura
Un client che non possiede il lock non può eseguire comandi che modifichino lo stato della risorsa bloccata
In particolare impedisce i comandi: PUT, POST, DELETE, MKCOL, PROPPATCH, MOVE, LOCK, UNLOCK
Al contrario GET e PROPFIND non sono impediti dal lock WebDAV: Locking
LOCK (2) : LOCK (2) Il lock funziona solo su intere risorse
E' l'unico modo per rendere il meccanismo indipendente dal content type
E' molto simile al meccanismo fornito dai file system, rendendo la transizione di un file system in file system distribuito particolarmente semplice
Le proprietà live possono cambiare durante la vita di un lock, le proprietà non-live debbono essere modificate dal proprietario del lock
WebDAV: Locking
LOCK (3) : LOCK (3) Altro motivo:
I content types cambiano continuamente
due revisioni di Html e Xml mentre si discuteva lo standard WebDAV
Supportare una revisione di un content type può rendere il protocollo facilmente obsoleto WebDAV: Locking
LOCK (4) : LOCK (4) I lock possono essere esclusivi o condivisi
Un lock esclusivo permette l'accesso solo al client che ha ottenuto il lock
Un lock condiviso permette al proprietario del lock di specificare altri client che possono accedere alla risorsa
I lock condivisi sono un bene e un male!!! WebDAV: Locking
LOCK (5) : LOCK (5) Tuttavia i lock esclusivi sono troppo rigidi in condizioni di lavoro opportunistiche
La gente si dimentica di rilasciare un lock
E' necessario richiedere l'intervento dell'amministratore per rimuovere un lock dimenticato
I lock condivisi
Permettono di continuare il lavoro anche se il proprietario del lock se ne è andato alle Seychelles
Richiedono però meccanismi out-of-band e in definitiva extra-protocollo per la negoziazione sull'accesso alla risorsa WebDAV: Locking
Ciclo di vita di un Lock : Ciclo di vita di un Lock unlocked locked LOCK UNLOCK LOCK lock timeout Rimozione del lock da parte dell'amministratore WebDAV: Locking
Procedimento di LOCK : Procedimento di LOCK LOCK crea il lock specificato dall’elemento xml sulla URI di richiesta
LOCK ritorna un lock token che identifica il lock al server
Il client può richiedere un timeout
WebDAV: Locking
Sintassi Lock (1) : Sintassi Lock (1) Richiesta:
LOCK “risorsa sulla quale si vuole fare il Lock “ HTTP/1.1
Host: “indirizzo WWW dell’host”
Timeout: “tempo di durata del lock,vi è la possibilità di specificarne più di uno in base a quello che poi il server supporta”
Content-Type: “content-type nel formato MIME”
Content-Length: “lunghezza di questo messaggio”
…resto della richiesta LOCK in XML
Si noti che la proprietà locktype è sempre impostata a write perché è l’unico tipo di lock supportato WebDAV: Locking
Sintassi Lock (2) : Sintassi Lock (2) Risposta:
HTTP/1.1 “codice di stato”
Content-Type: “content-type nel formato MIME”
Content-Length: “lunghezza di questo messaggio”
…resto della risposta LOCK in XML
All’interno della proprietà lockdiscovery vi sarà la descrizione del lock attivato sulla risorsa
WebDAV: Locking
LOCK: richiesta : LOCK: richiesta LOCK /~s97074/webdav.doc HTTP/1.1
Host: www.cclinf.polito.it
Timeout: Second-500, Infinite
Content-Type: text/xml
Content-Length: 151
http://www.cclinf.polito.it/~ejw/contact.html
WebDAV: Locking
LOCK: risposta (1) : LOCK: risposta (1) HTTP/1.1 200 OK
Content-Type: text/xml
Content-Length: xxxx
infinity
http://www.cclinf.polito.it/~ejw/contact.html
WebDAV: Locking
LOCK: risposta (2) : LOCK: risposta (2) Second-500
opaquelocktoken:918527121.406
WebDAV: Locking
Esempio LOCK (3) : Esempio LOCK (3) Nell’esempio precedente si nota come viene creato con successo un lock esclusivo sulla risorsa www.cclinf.polito.it/~s97074/webdav.doc
Il campo contiene informazioni associate al possessore del lock
Il client richiede un lock per tempo infinito,se possibile, altrimenti di 500 secondi
infatti il server imposta un timeout che rimuove il lock dopo 500 secondi WebDAV: Locking
Lock Token : Lock Token Il lock token è un tipo di token di stato rappresentato da una URI
È ritornato dopo ogni operazione di LOCK terminata con successo all’interno della proprietà lockdiscovery
I lock token devono essere Unici
Questo viene fatto attraverso gli opaque lock token
Per garantire l’unicità su tutte le risorse a tempo indefinito l’opaquelocktoken necessita di utilizzare il meccanismo dell’Universal Unique Identifier (UUID),come descritto nell’[ISO-11578]
WebDAV: Locking
Loken Token: è rischioso usarli? (1) : Loken Token: è rischioso usarli? (1) La specifica dei lock token richiede l’uso dei UUID
Gli UUID contengono un campo nodo che è l’ IEEE address, di solito l’indirizzo dell’host
per sistemi con più nodi IEEE 802 ogni nodo disponibile può essere usato, dal momento in cui un WebDAV server emetterà diversi lock è facile che il suo indirizzo IEEE 802 sia esposto WebDAV: Locking
Loken Token: è rischioso usarli? (2) : Loken Token: è rischioso usarli? (2) I principali rischi associati all’esposizione dell’indirizzo IEEE 802 sono:
È possibile tracciare lo spostamento di HW da subnet a subnet
È possibile riconoscere il produttore dell’HW che gira sul Server WebDAV
È possibile determinare il numero dei computer che utilizzano WebDAV
WebDAV: Locking
LOCK Multi-risorsa (1) : LOCK Multi-risorsa (1) Usando l’header depth impostandolo a Infinity si può fare un lock su una collezione e su tutti i suoi figli
È ritornato un singolo lock token che specifica il lock su tutte le risorse
Un Unlock su questo token rimuove il lock da tutte le risorse in questione WebDAV: Locking
LOCK Multi-risorsa (2) : LOCK Multi-risorsa (2) Il lock gerarchico assicura…
Tutte le risorse nella gerarchia fanno parte del lock
Le risorse eliminate dalla gerarchia vengono rimosse dal lock
Ma…
Se una gerarchia locked viene copiata o spostata la gerarchia di destinazione non sarà locked WebDAV: Locking
Esempio LOCK Multi-risorsa (1) : Esempio LOCK Multi-risorsa (1) Richiesta:
LOCK /webdav/ HTTP/1.1
Host: webdav.sb.aol.com
Timeout: Infinite, Second-4100000000
Depth: infinity
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
Authorization: Digest username="ejw",
realm="ejw@webdav.sb.aol.com", nonce="...",
uri="/workspace/webdav/proposal.doc",
response="...", opaque="..." WebDAV: Locking
Esempio LOCK Multi-risorsa (2) : Esempio LOCK Multi-risorsa (2)
http://www.ics.uci.edu/~ejw/contact.html
WebDAV: Locking
Esempio LOCK Multi-risorsa (3) : Esempio LOCK Multi-risorsa (3) Risposta:
HTTP/1.1 207 Multi-Status
Content-Type: text/xml; charset="utf-8"
Content-Length: xxxx
http://webdav.sb.aol.com/webdav/secret
HTTP/1.1 403 Forbidden WebDAV: Locking
Esempio LOCK Multi-risorsa (4) : Esempio LOCK Multi-risorsa (4)
http://webdav.sb.aol.com/webdav/
D:href>
HTTP/1.1 424 Failed
Dependency
WebDAV: Locking
Esempio LOCK Multi-risorsa (5) : Esempio LOCK Multi-risorsa (5) Si noti che si richiede un lock esclusivo alla collezione e a tutti i suoi figli
L’utente inoltre specifica un lock di durata infinita
Si ha errore 403 (forbidden) perché non si può fare lock sulla risorsa
Il codice di stato 424 (failed dependency) semplicemente sta ad indicare che il metodo non può essere svolto perché qualcos’altro non è andato a buon fine WebDAV: Locking
UNLOCK : UNLOCK UNLOCK rimuove il lock identificato dal token, non solo sulla risorsa specificata nell'URI della richiesta, ma anche su tutte le risorse incluse nel lock
Se un lock è stato richiesto su una collezione, tutta la collezione viene liberata dal lock: il lock utilizza la semantica del tutto o niente!
WebDAV: Locking
Esempio UNLOCK (1) : Esempio UNLOCK (1) Richiesta:
UNLOCK /~s97074/webdav/info.doc HTTP/1.1
Host: www.cclinf.polito.it
Lock-Token:
Authorization: Digest username="ejw",
realm="ejw@webdav.sb.aol.com", nonce="...",
uri=" /~s97074/webdav/proposal.doc",
response="...", opaque="...“
Risposta:
HTTP/1.1 204 No Content
WebDAV: Locking
Esempio UNLOCK (2) : Esempio UNLOCK (2) Nell’esempio il lock indentificato dal token opaco viene rimosso con successo dalla risorsa
Il codice di stato è 204 (no-content) ed indica semplicemente il successo e il fatto che non c’è un body nella risposta WebDAV: Locking
Feature Discovery : Feature Discovery Il metodo OPTIONS (è di HTTP!) viene usato per scoprire le caratteristiche HTTP o WebDAV supportate dal server per una data risorsa
OPTIONS /wg/ HTTP/1.1
Host: www.webdav.org
HTTP/1.1 200 OK
Date: Tue, 09 Feb 1999 02:39:06 GMT
Server: Apache/1.3.4 (Unix) DAV/0.9.6
Content-Length: 0
Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE
DAV: 1
WebDAV: Options
WebDAV Software : WebDAV Software Sebbene il protocollo sia recente è già ampiamente supportato sia in ambiente Opensource che nei software commerciali
Principali WebDAV Clients (1) : Principali WebDAV Clients (1) Application Software:
Microsoft: Office 2000 (Word, Excel, PowerPoint, Publisher)
apre/salva direttamente da/al web server
Usa il meccanismo dei Lock per la protezione da sovrascritture
Adobe: Photoshop 6, Acrobat 5
Web Site Authoring
Adobe: Go Live 5
Macromedia: Dreamweaver 4 WebDAV: Software
Principali WebDAV Clients (2) : Principali WebDAV Clients (2) Remote File Access:
Apple: Mac OS X webdavfs
OS X ha Apache e mod_dav (si deve configurare mod_dav perchè funzioni)
Microsoft: Windows Web Folders
Wind River Software: WebDrive
Goliath (Mac, open source)
Nautilus (GNOME project, Eazel)
WebDAV Explorer (UC Irvine, Feise/Kanomata, open source) WebDAV: Software
Principali WebDAV Clients (3) : Principali WebDAV Clients (3) XML editors
Excosoft: Documentor
Altova: XML Spy 3.5
WebDAV: Software
Cadaver : Cadaver è un client WebDAV da linea di comando che permetto upload di file,download,on-screen display,move/copy,utilizzo di collezioni e operazioni di Lock
La release corrente è: cadaver 0.21.0 Cadaver WebDAV: Clients
Sitecopy : Sitecopy Permette di editare i web site localmente
Aggiorna in modo remoto siti web e permette al sito remoto di essere sincronizzato con quello locale usando un unico comando
Il programma si ricorda cosa c’è sul server, così non deve andare a vedere ogni volta il sito
Piattaforme supportate:Linux, FreeBSD, OS/2, Win32, IRIX, Solaris, SunOS, Digital Unix
WebDAV: Clients
PerlDAV (1) : PerlDAV (1) PerlDAV è una libreria Perl per modificare il contenuto dei server Web attraverso il supporto di WebDAV. Si può fare LOCK, DELETE, PUT di files
La libreria PerlDAV consiste di:
HTTP::DAV – una API object-oriented del client Web-DAV
dave - DAV Explorer, una console end-user per interagire con i server WebDAV
WebDAV: Clients
PerlDAV (2) : PerlDAV (2)
Dave permette di:
Ricevere e inviare files
Creare directory su Web server remoti
Remuovere files e directory da un WebServer remoto
Editare un file sul server con un solo comando
Lock,unlock di files e directory remoti
Utilizzo di Https
Autenticazione tramite Digest
WebDAV: Clients
Kiwi : Kiwi Kiwi è un file system che si basa su HTTPS e WebDAV
Kiwi è un file system distribuito realizzato per permettere l’accesso sicuro di file
a tal fine ci si è basati su SSL e WebDAV
Il server kiwi si basa su Apache,Mod_Dav,Mod_SSL e Mod_Kiwi
Il modulo Mod_Kiwi viene utilizzato principalmente per l’autenticazione
http://www-cs students.stanford.edu/~austin/kiwi.pdf WebDAV: Clients
Neon : Neon Neon è un http e WebDAV client
Supporta tutti i comandi principali di WebDAV (MOVE, COPY, DELETE, MKCOL, PROPPATCH,PROPFIND)
Supporto SSL attraverso OpenSSL
http://www.webdav.org/neon/neon-0.23.7.tar.gz
WebDAV: Clients
DAV explorer (1) : DAV explorer (1) DAV Explorer è un client WebDAV che permette:
Vedere l’albero del server WebDAV
Upload e download di risorse Web
Locking e unlocking di risorse
Visualizza tutte le proprietà delle risorse
Copia,rinomina,crea e elimina collezioni e/o singole risorse
Piattaforme supportate:Windows 95/98/ME/NT/2000, Solaris e Linux
L’interfaccia del DAV Explorer è simile per look e funzionalità a quello di Windows
WebDAV: Clients
DAV explorer (2) : DAV explorer (2) Connettersi ad un server WebDAV
WebDAV: Clients
DAV explorer (3) : DAV explorer (3) Se vi è la basic authentication Dav Explorer vi chiederà login name e password
WebDAV: Clients
DAV explorer lock (1) : DAV explorer lock (1) Locking di risorse:
Per lockare una risorsa selezionarla nel pannello a destra, poi selezionare “Lock” dal File menu, o cliccare sull’icona di lock nella toolbar
Per visualizzare le proprietà di un lock andare nel “View” menu e poi selezionare “View Lock Properties”
Una piccola finestra apparirà con le informazioni sul lock WebDAV: Clients
DAV explorer lock (2) : DAV explorer lock (2) Ecco un esempio di lock: WebDAV: Clients
DAV explorer Proprietà (1) : DAV explorer Proprietà (1) Proprietà:
Per visualizzare le proprietà selezionare il menù “View” e poi “View Properties” o cliccare click sull’icona view properties
Una finestra visualizzerà le proprietà definite sulla risorsa WebDAV: Clients
DAV explorer Proprietà (2) : DAV explorer Proprietà (2) Ecco un esempio: WebDAV: Clients
Alcuni Prodotti commerciali : Alcuni Prodotti commerciali My Docs Online!
Adobe Acrobat 5
Adobe GoLive
Mac OS X
Macromedia Dreamweaver
Merlin and Lancelot
Dav4J
Microsoft Windows (attraverso le Web Folders a partire da IE 5.0)
WebDAV: Link a prodotti
Versioning : Versioning Panoramica argomenti
Terminologia
Data model
Checkout,checkin e uncheckin
Update, Merging
Activities
Workspaces
Baselines
Panoramica : Panoramica Le funzionalità del protocollo sono suddivise in:
Caratteristiche
Le caratteristiche possono essere Basic o Advanced WebDAV: Versioning
Caratteristiche Basic : Caratteristiche Basic VERSION-CONTROL
Basic versioning
Solo versioning automatico (no checkin or checkout)
REPORT e version-tree report
CHECKOUT
Checkout, checkin, e uncheckout
VERSION-HISTORY
La risorsa Version history ha una URL nello spazio dei nomi del server
WORKSPACE
Server workspace
RISORSE DI LAVORO
Client workspace
UPDATE
LABEL WebDAV: Versioning
Caratteristiche Advanced : Caratteristiche Advanced MERGE
BASELINE
memorizzano checked-in state delle collezioni
ACTIVITY
Versioni associate ad una modifica logica
VERSION-CONTROLLED-COLLECTION
Le collezioni possono avere versione
WebDAV: Versioning
Version History : Version History WebDAV: Versioning Foo.htm 1 2 7 6 5 4 3 initial Beta1 Test1 Beta2 URL path of
Versioned
Controlled
Resource Version Name Label Successor Linea di
Discendenza Revision
History Predecessor Fork Merge
VERSION-CONTROL (1) : VERSION-CONTROL (1) Il VERSION-CONTROL fa il controllo della versione a
una risorsa senza versione
una risorsa che è già version-controlled WebDAV: Versioning
VERSION-CONTROL (2) : VERSION-CONTROL (2) Se la richiesta di VERSION-CONTROL è fatta per una risorsa senza versione:
Crea una nuova version history resource: una risorsa che contiene tutte le versioni di una risorsa version-controlled
Una lista di URL delle versioni in questa revisione
L’URL della versione principale ovvero il padre di tutte le versioni
Crea una nuova version resource: è una risorsa che contiene una copia di un particolare stato (contenuto e proprietà non-live) di una risorsa version-controlled
Il server assegna alla nuova version resource una nuova URL univoca
Converte la risorsa senza versione in una version controlled resource
Ha un puntatore alla version history resource
WebDAV: Versioning
Fondamenti del Versioning (1) : Fondamenti del Versioning (1) Ogni versione ha un suo URL, in modo da permettere collegamenti ipertestuali a una specifica versione
Quindi ogni versione deve essere una risorsa a se stante WebDAV: Versioning
Fondamenti del Versioning (2) : Fondamenti del Versioning (2) Le aree di lavoro sono la motivazione per mantenere separata la risorsa version-controlled dalla risorsa history
Un workspace permette a un utente di lavorare per conto suo, nella sua porzione del namespace
per esempio, Paolo e Luisa potrebbero avere due workspace:
/ws/users/paolo/ and /ws/users/luisa/
Se entrambi vogliono pubblicare foo.html nel loro workspace locale, ognuno ha bisogno di una version controlled resource
in questo modo una version history può essere associata a più risorse version controlled
WebDAV: Versioning
CHECKOUT : CHECKOUT Per lavorare su una risorsa si può fare:
Check out
editing
Check in WebDAV: Versioning
CHECKOUT : CHECKOUT CHECKOUT si può applicare a una risorsa version controlled per creare una nuova working resource
Permette modifiche al corpo e alle proprietà non-live della version controlled resource
Se una versione è già checked-out, o ha un successore, una fork (ramificazione) è accettabile
La proprietà DAV:checkout-fork su una versione ha effetto sulla formazione di ramificazioni (fork)
ok: fork permessa
discouraged: il client deve indicare che deve fare il fork
forbidden: la ramificazione non è permessa (version history lineare)
WebDAV: Versioning
Esempio Checkout (1) : Esempio Checkout (1) Richiesta:
CHECKOUT /his/12/ver/V3 HTTP/1.1
Host: repo.webdav.org
Content-Length: 0
Risposta:
HTTP/1.1 201 Created
Location: http://repo.webdav.org/wr/157
Cache-Control: no-cache
WebDAV: Versioning
Esempio Checkout (2) : Esempio Checkout (2) Nell’esempio si fa checkout sulla versione V3 e la nuova working resource è http://repo.webdav.org/wr/157 WebDAV: Versioning
CHECKIN / UNCHECKIN (1) : CHECKIN / UNCHECKIN (1) CHECKIN blocca lo stato di una risorsa version controlled :
Crea una nuova version resource
Corpo e proprietà non-live sono uguali a quelle della version controlled resource
Blocca il corpo e le proprietà non-live della risorsa version controlled (le rende read-only)
Un commento che descrive lo scopo di un cambio può essere scritto in DAV:comment property (prima del CHECKIN) WebDAV: Versioning
CHECKIN / UNCHECKIN (2) : CHECKIN / UNCHECKIN (2) UNCHECKOUT interrompe la sequenza di editing
Elimina la CHECKOUT
Ripristina lo stato precedente all stato di CHECKOUT della version controlled resource
WebDAV: Versioning
Esempio Checkin (1) : Esempio Checkin (1) Richiesta:
CHECKIN /wr/157 HTTP/1.1
Host: repo.webdav.org
Content-Length: 0
Risposta :
HTTP/1.1 201 Created
Location: http://repo.webdav.org/his/23/ver/15
Cache-Control: no-cache
WebDAV: Versioning
Esempio Checkin (2) : Esempio Checkin (2) La working resource /wr/157 attraverso il checkin permette la creazione della nuova versione all’indirizzo http://repo.webdav.org/his/23/ver/15 WebDAV: Versioning
Autoversioning (1) : Autoversioning (1) Ci sono molte applicazioni WebDAV
Non conoscono il versioning!
Vorrebbero provvedere all’automatic versioning WebDAV: Versioning
Autoversioning (2) : Autoversioning (2) Ci sono due tipi di autoversioning:
Ogni modifica crea una versione nuova
PUT/PROPPATCH CHECKOUT PUT/PROPPATCH CHECKIN
Funziona bene con i client che replicano le risorse nel loro spazio locale e poi una volta finito l’editing trasferiscono al server
Ogni coppia LOCK/UNLOCK crea una nuova versione
LOCK LOCK CHECKOUT
UNLOCK CHECKIN UNLOCK
Funziona bene per i clients che lavorano direttamente sul server WebDAV e utilizzano I lock WebDAV: Versioning
Labels (1) : Labels (1) È una stringa leggibile che distingue una versione in una version history da tutte le altre versioni all’interno di quella version history
Garantisce unicità all’interno di una version history WebDAV: Versioning
Labels (2) : Labels (2) Può essere riutilizzata in version history differenti
Per esempio, “release_beta” può essere usata per identificare diverse versioni su diverse version history
Può essere usata come un semplice modo per memorizzare le strutture
Svantaggio: i labels vanno cambiati man mano che le versioni cambiano WebDAV: Versioning
Labels (3) : Labels (3) Il metodo LABEL è usato per impostare/muovere/rimuovere un label da una versione
Label: header può essere usato con GET/PROPFIND su una risorsa version controlled per recuperare informazioni
WebDAV: Versioning
UPDATE : UPDATE Provvede un meccanismo per cambiare lo stato di una checked-in version controlled resource in quello di un’altra versione della version history di quella risorsa
Di solito il corpo e le proprietà non-live di una version controlled resource sono le stesse dell’ultima checked-in version
UPDATE
Modifica il contenuto e le proprietà non-live …
… di una risorsa checked-in version-controlled
… per diventare l’update dell’ultima versione della version history
WebDAV: Versioning
Merging (1) : Merging (1) Le ramificazioni in una version history sono utilizzate per due scopi:
Rappresentare simultaneamente gli sviluppi di diversi collaboratori (parallel development)
Rappresentare varianti di una risorsa
Linguaggio naturale, computing platform, ecc
È pertanto utile unire le ramificazioni che rappresentano sviluppi paralleli del lavoro
Si combinano così gli sforzi di più persone in un unico progetto armonico
WebDAV: Versioning
Merging (2) : Merging (2) Il MERGE che combina due versioni:
Combina in modo minimo le due ramificazioni nel version history
Fa uno sforzo per fare il merge del contenuto se il server capisce il content type di entrambe le versioni
text/* merge dovrà essere verosimilmente il tipo uniformemente supportato WebDAV: Versioning
Version Tree Report : Version Tree Report Una visualizzazione grafica di una version history aiuta a capire:
Informazioni necessarie a creare questa vista:
Lista di versioni
Nomi delle Versioni
Relazioni tra predecessori/successori
Nel modello DeltaV le informazioni sono distribuite:
Version history resource: liste di versioni
Version resources: nomi delle versioni,relazioni pred/succ
Usando PROPFIND, abbiamo bisogno di N+1 network requests nel caso peggiore (N=# di versioni) WebDAV: Versioning
Activities: cosa sono? : Activities: cosa sono? Spesso un cambiamento logico si estende attraverso più versioni su diverse version history
Le Activities collegano un cambiamento logico con il set di versioni create mentre viene fatto il cambiamento
Le versioni di una version history vengono limitate a una sola linea di discendenza
Le Activities non hanno versione
A volte ci si vuole assicurare che tutto il lavoro venga svolto da tutti su una sola linea di discendenza
Per evitare merging tra collaboratori diversi
Le Activities vengono usate per rafforzare il lavoro su una sola linea di discendenza
WebDAV: Versioning
Activities: utilizzo (1) : Activities: utilizzo (1) MKACTIVITY crea una nuova risorsa activity
Subito dopo il checkout, l’utente specifica l’activity
Questa activity è associata a una nuova versione creata al checkin
In particolare:
L’URL della risorsa checked-out viene memorizzata nella activity DAV:activity-checkout-set property
Al checkin, l’URL della nuova versione viene messa nella activity DAV:activity-version-set property…
…e la checked-out resource viene rimossa da DAV:activity-checkout-set WebDAV: Versioning
Activities: utilizzo (2) : Activities: utilizzo (2) Usando le activities è possibile selezionare un particolare cambiamento logico per il merging in un altro workspace
L’activity viene utilizzata in una MERGE request
L’ultima versione di una activity è quella usata nel merge (per ogni version history)
WebDAV: Versioning
Workspace : cos’è? : Workspace : cos’è? Un workspace è una locazione…
…dove una persona può lavorare da sola
… a “riparo” dai cambiamenti fatti dagli altri collaboratori sullo stesso insieme di risorse WebDAV: Versioning
Workspace: uso : Workspace: uso Workspace, tipico utilizzo:
Due persone che modificano entrambi lo stesso file e vogliono testare in tranquillità le loro modifiche al codice
La struttura di un grande progetto con questi cambiamenti viene cambiata, ma:
Non si desidera che tutti si fermino in attesa che quelle modifiche siano completate
Si vuole mantenere ogni cambiamento nello spazio dei nomi invisibile agli altri fino al completamento
Uno sviluppatore fa in modo che i suoi cambiamenti non siano visibili
I nuovi file sono nei loro Workspace, ma non sotto version control finchè non si giunge alla fine dei cambiamenti
WebDAV: Versioning
Workspace: tipi : Workspace: tipi Vi sono due tipi di workspace:
Server
client
La differenza principale è che il server contiene una porzione del suo namespace per ogni workspace
I workspace possono mantenere dati con e senza versione
WebDAV: Versioning
Server workspaces (1) : Server workspaces (1) Ha un diverso namespace per ogni workspace
Per esempio: Sara e Franco hanno entrambi un workspace
Sara : /users/people/Sara/projectX/…
Sara fa tutto quel che vuole nella sua area
Franco : /users/people/Franco/projectX/…
Franco,anche lui fa tutto quel che vuole nella sua area WebDAV: Versioning
Server workspaces (2) : Server workspaces (2) Possono esserci repliche locali di versioni
Vantaggi
Permette l’accesso da locazioni e macchine diverse
Permette che le operazioni sul namespace siano isolate
Svantaggi
Richiede sforzi per implementarlo
WebDAV: Versioning
Client workspace : Client workspace Lo spazio dei nomi del server non viene conservato
I files vengono replicati nelle macchine locali
Vantaggi
Si utilizza meno il server namespace
Svantaggi
Non si può accedere al workspace da macchine e locazioni diverse
Le operazioni sul Namespace sono subito visibili
WebDAV: Versioning
Meccanismi del Server Workspace (1) : Meccanismi del Server Workspace (1) MKWORKSPACE crea un nuovo workspace
Questa è la directory radice del progetto
Es., /users/people/Sara/projectX/ WebDAV: Versioning
Meccanismi del Server Workspace (2) : Meccanismi del Server Workspace (2) VERSION-CONTROL aggiunge delle risorse version controlled al workspace
Crea una nuova risorsa version controlled per una version history
La version history avrà diverse risorse version controlled
Si pensi alla risorsa version controlled come un punto di accesso ad alcune locazioni nel namespace per fare operazioni sulla version history
WebDAV: Versioning
Sincronizzare i workspace : Sincronizzare i workspace Ad un certo punto un utente che lavora nel suo workspace avrà bisogno dei cambiamenti fatti dagli altri collaboratori
Il MERGE combina due workspace
Di solito la sorgente del merge è il workpace del progetto comune e la destinazione è un workspace di un utente
MERGE cerca la più recente checked-in version per ogni risorsa version-controlled nel workspace
WebDAV: Versioning
Server Workspace:esempio (1) : Server Workspace:esempio (1) Si consideri un programma con I seguenti files:
/projectX/makefile
/projectX/main.c
/projectX/defs.h
Marco e Gino vogliono collaborare a questo lavoro
Ognuno lavora in un diverso server workspace
Crea i workspace:
MKWORKSPACE /users/marco/projectX/
MKWORKSPACE /users/gino/projectX/
WebDAV: Versioning
Server Workspace:esempio (2) : Server Workspace:esempio (2) Utilizzo di version control per aggiungere i files:
Workspace di marco:
VERSION-CONTROL /users/marco/projectX/makefile da /projectX/makefile
VERSION-CONTROL /users/marco/projectX/main.c da /projectX/main.c
VERSION-CONTROL /users/marco/projectX/defs.h da /projectX/defs.h
Workspace di gino:
VERSION-CONTROL /users/gino/projectX/makefile da /projectX/makefile
VERSION-CONTROL /users/gino/projectX/main.c da /projectX/main.c
VERSION-CONTROL /users/gino/projectX/defs.h da /projectX/defs.h
WebDAV: Versioning
Server Workspace:esempio (3) : Server Workspace:esempio (3) Version history di main.c: /repo/o522/v1 /repo/o522/v2 /repo/o522/v3 /repo/o522/v4 version history resource /repo/o522/v1
/repo/o522/v2
/repo/o522/v3
/repo/o522/v4 version resources /his/o522 /projectX/main.c /users/gino/ projectX/main.c version controlled resources /repo/o522/v5 /users/marco/ projectX/main.c WebDAV: Versioning
Server Workspace:esempio (4) : Server Workspace:esempio (4) main.c makefile defs.h /users/gino/projectX/
main.c, 4
makefile, 3
defs.h, 3 /users/marco/projectX/
main.c, 5
makefile, 3
defs.h, 2 3 5 WebDAV: Versioning
Client Workspace : Client Workspace Il client mantiene il controllo dello spazio dei nomi dei dati locali
Il Server viene utilizzato poco
Working resource
La crea dopo la checkout
Una locazione sul server dove si può scrivere il contenuto delle risorsa checked-out
Checkin
CHECKIN converte la working resource in una version resource
Una version history può avere diverse working resource contemporanee
WebDAV: Versioning
Esempio di Client Workspace (1) : Esempio di Client Workspace (1) Si assuma di lavorare sul file main.c:
Il Client per prima cosa fa una copia di main.c usando GET
Il risultato della get viene memorizzato in uno spazio locale:
/{local workspace name}/main.c
Poi il client fa la CHECKOUT
Crea una working resource
L’URL della risorsa utilizzata si trova nell’header della CHECKOUT response WebDAV: Versioning
Esempio di Client Workspace (2) : Esempio di Client Workspace (2) Il Client lavora sulla copia locale di main.c
Quando ha finito il client salva I suoi cambiamenti sul server
Faccio PUT
Poi fa CHECKIN della working resource
Rimette la versione alla working resource
WebDAV: Versioning
Scopi delle Baseline : Scopi delle Baseline Quando una grande collezione di documenti viene rilasciata al di fuori dell’organizzazione che la sviluppa c’è la necessità di memorizzare con esattezza quale versione è stata rilasciata
In particolare per release di software
Una Baseline può memorizzare l’esatta versione di una grossa raccolta di risorse sotto version control WebDAV: Versioning
Definizione di Baseline (1) : Definizione di Baseline (1) Si tratta di uno speciale tipo di version resource che cattura lo stato dei membri version-controlled di una configurazione
Una baseline history è una version history i cui membri sono baseline
Le baseline hanno versioni, le quali possono cambiare
WebDAV: Versioning
Definizione di Baseline (2) : Definizione di Baseline (2) Le nuove baseline vengono create attraverso il checking out e poi il checking in di un tipo speciale di version-controlled resource chiamata : version-controlled configuration
Le Baselines hanno lo stesso data model delle altre risorse sotto version control
Version history per baselines baseline history
Version resources baseline
Version controlled resource version controlled configuration WebDAV: Versioning
Funzionamento Baseline (1) : Funzionamento Baseline (1) Una collezione viene messa sotto baseline control utilizzando il metodo BASELINE-CONTROL
Esempio:
Codice sorgente per un progetto nella collezione /project/src/
Si applica BASELINE-CONTROL a /project/src/
Si crea una nuova baseline history:
Metodo BASELINE-CONTROL
Crea una nuova configurazione version controlled
Mette l’URL in DAV:version-controlled-configuration property of collection
Memorizza le associazioni tra baseline history e collezioni
WebDAV: Versioning
Funzionamento Baseline (2) : Funzionamento Baseline (2) Creare una nuova baseline:
CHECKOUT version controlled configuration
Rende modificabile la configurazione version controlled
Prendere visione del progetto:
CHECKIN della configurazione version controlled
Crea una nuova baseline
es., una nuova versione nel version history dei baseline
Crea anche una nuova collezione…
… in una porzione definita del server nel namespace …
… che contiene un set di risorse version-controlled…
…ognuna delle quali ha il valore della più recente checked-in version nella sua version history WebDAV: Versioning
Il server web Apache e WebDAV : Il server web Apache e WebDAV Come installare e configurare un server web Apache che implementi il protocollo WebDAV
WebDAV su server Apache : WebDAV su server Apache Guida sulla configurazione di un server web Apache che supporti WebDAV
Caratteristiche:
Autenticazione: LDAP
Sicurezza: SSL
Fonte:
“Apache based WebDAV Server with LDAP and SSL” di Saquib Ali sotto licenza GNU Free Documentation License WebDAV: Apache
Software necessario : Software necessario Apache versione 1.3.x o superiore
http://www.apache.org/dist/httpd/
OpenSSL
Per compilare mod_ssl per apache
Per maneggiare certificati SSL
http://www.openssl.org/suorce/
OpenLDAP
http://www.openldap.org/software/download/
WebDAV: Apache
Software necessario : Software necessario Apache è un server a moduli, al software di base si possono cioè aggiungere ulteriori funzionalità, nel nostro caso:
mod_dav: per permettere l’utilizzo di WebDAV
mod_auth_ldap: per permettere l’autenticazione con LDAP
mod_ssl: per permettere l’utilizzo di canali protetti ssl WebDAV: Apache
Sequenza di installazione : Sequenza di installazione Installare le librerie di openLDAP
Installare OpenSSL
Pre-configurare Apache al fine di permettere l’installazione di mod_dav con lo script
./configure –prefix=/usr/local/apache
Installazione di mod_dav
Installazione di mod_auth_ldap
Installazione di mod_ssl
WebDAV: Apache
Sequenza di installazione : Sequenza di installazione Configurazione ed installazione di apache (con inclusione dei 3 moduli necessari)
Configurazione:
./configure –prefix=/usr/local/apache \
--enable-module=ssl \
--activate-module= \
src/modules/ldap/mod_auth_ldap.c \
--activate-module=src/modules/dav/libdav.a \
--enable-shared=ssl WebDAV: Apache
Configurazione di WebDAV : Configurazione di WebDAV Una volta installati tutti i componenti si deve procedere alla configurazione di WebDAV andando a modificare alcuni file di configurazione del server
Nel file di configurazione /apache/conf/httpd.conf bisogna aggiungere la seguente riga al fine di abilitare il modulo WebDAV
Addmodule mod_dav.c WebDAV: Apache
Configurazione di WebDAV : Configurazione di WebDAV WebDAV utilizza un database di lock in cui salva quali risorse sono locked in un determinato istante
Creare una directory in cui salvare il database
Darne i permessi di accesso al server
Specificare in httpd.conf la directory
DAVLockDB \ /usr/local/apache//DAVLock WebDAV: Apache
Configurazione di WebDAV : Configurazione di WebDAV Bisogna abilitare ogni directory in cui si vuole utilizzare WebDAV aggiungendo nella entry della relativa directory nel file httpd.conf
DAV On
Esempio:
DAV on
…
WebDAV: Apache
Configurazione di WebDAV : Configurazione di WebDAV Creare la directory in cui si vuole fare utilizzo di WebDAV
Verificare la sintassi di httpd.con
/usr/local/apache/bin/apachectl configtest
Riavviare il server web
/usr/local/apache/bin/apachectl restart
WebDAV: Apache
WebDAV & IIS : WebDAV & IIS Configurazione di WebDAV in IIS e problemi correlati
IIS (1) : IIS (1) IIS è il server web di Microsoft
Di default non è installato all’installazione del sistema operativo
Integra la possibilità di supportare diversi estensioni che permettono l’utilizzo di molteplici protocolli e linguaggi WebDAV: IIS
IIS (2) : IIS (2) Alcune estensioni dinamiche devono essere appositamente installate:
ASP
ASP.NET
Estensioni lato server di Frontpage
Altre vengono già installate di default all’installazione del pacchetto
WebDAV WebDAV: IIS
WebDAV : WebDAV E’ integrato nei sistemi operativi Microsoft a partire da Windows 2000
E’ supportato a partire da IIS 5.0, in IIS 4.0 doveva essere installato come estensione WebDAV: IIS
Abilitazione dell’estensione per WebDAV in IIS 4.0 : Abilitazione dell’estensione per WebDAV in IIS 4.0 Si utilizza IIS manager facendo la seguente procedura
Cliccare su Web Service Extensions
Cliccare sull’estensione di WebDAV: WebDAV Publishing
Cliccate su Allow per abilitarla (o su Prohibit per disabilitarla)
Cliccare su OK WebDAV: IIS
Client Microsoft per WebDAV (1) : Client Microsoft per WebDAV (1) Microsoft già a partire dal sistema Windows 2000 dà una particolare attenzione al protocollo WebDAV integrandolo pesantemente nei suoi software client
Attuando parte dei principi di distribuzione delle risorse in rete per i quali è nato WebDAV
Ecco alcuni esempi… WebDAV: IIS
Client Microsoft per WebDAV (2) : Client Microsoft per WebDAV (2) Windows 2000 e Windows XP
Permettono di accedere direttamente a delle risorse WebDAV tramite sistema operativo
Internet explorer (ver. 5.0 e 6.0)
Office 2000 e Office XP
Permettono di fare un editing distribuito delle risorse WebDAV: IIS
Abilitazione dei Client (1) : Abilitazione dei Client (1) I client Microsoft, in alcuni casi, devono essere abilitati per poter funzionare con il protocollo WebDAV
Procedura:
Andare in Administrative Tools e cliccare su Computer Management
Fare doppio-click su Services and Applications e fare doppio-click su Services WebDAV: IIS
Abilitazione dei Client (2) : Abilitazione dei Client (2) Andare su WebClient, cliccare con il tasto destro del mouse e andare su Properties
In Status type andare su Automatic e cliccare su Apply
Nella sezione Service status cliccare su Start e poi su OK WebDAV: IIS
Creare una directoryper le pubblicazioni (1) : Creare una directory per le pubblicazioni (1) Creare la directory, in cui si vogliono fare le pubblicazioni, in una partizione NTFS
Essa deve avere i seguenti permessi
Read
Read and Execute
List
Write
Modify
WebDAV: IIS
Perché in unapartizione NTFS? : Perché in una partizione NTFS? Un directory WebDAV deve essere creta in una partizione NTFS
Se creata in una partizione FAT
Posso leggere il contenuto delle risorse
Non posso leggere le proprietà delle risorse WebDAV: IIS
Creare una directoryper le pubblicazioni (2) : Creare una directory per le pubblicazioni (2) Creare una directory virtuale in IIS mettendo l’alias desiderato, con i seguenti permessi:
Read
Directory Browsing
Write
Indexing (opzionale): Se voglio abilitare i client a cercare una directory
Nota: Per fare queste operazioni bisogna essere loggati come amministratori del sistema
WebDAV: IIS
Cos’è una directory virtuale? : Cos’è una directory virtuale? Una directory virtuale è una alias, un nome facile da ricordare o da scrivere che permette di accedere a delle risorse in modo trasparente alla locazione fisica della directory in cui sono memorizzati i file
L’utente usa le directory virtuali per accedere ai file di cui ha bisogno WebDAV: IIS
Perché le directory virtuali? : Perché le directory virtuali? Chi accede alla directory non sa dove e come i file sono memorizzati
Gli alias che mi consentono l’accesso sono più facili e intuitivi rispetto ai nomi veri e propri
Le directory fisiche possono essere collocate in modo distribuito nella rete senza che l’utente se ne accorga WebDAV: IIS
Come creare una directory virtuale? : Come creare una directory virtuale? Usando IIS Manager
Andare nel directory del sito in cui voglio creare la virtual directory, andare su new e poi fare click su virtual directory
Scrivere l’Alias e cliccare su next
Scrivere il nome della directory fisica a cui la directory virtuale deve puntare e cliccare su next
Selezionare i permessi e andare su finish WebDAV: IIS
Bug di WebDAV in IIS : Bug di WebDAV in IIS Esistono alcuni bug nella realizzazione Microsoft di WebDAV che possono creare seri problemi di sicurezza WebDAV: IIS
Bug #1 (1) : Bug #1 (1) Configurazione:
Microsoft 2000
IIS 4.0
Causa:
Una particolare sequenza di comandi WebDAV mal formati WebDAV: IIS
Bug #1 (2) : Bug #1 (2) Effetti:
L’utilizzo della CPU al 100%
Il server riprende il suo funzionamento normale solo quando viene interrotto l’arrivo di richieste WebDAV malformate
Possibile attacco:
Denial of Service
Finche arrivano richieste mal formate IIS non può compiere il suo normale lavoro WebDAV: IIS
Bug #1 (3) : Bug #1 (3) Rimedi:
Installare un particolare patch
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=28564
Installa service pack 2 per Windows 2000 o successivi
Ulteriori informazioni:
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/ms01-016.asp WebDAV: IIS
Bug #2 (1) : Bug #2 (1) Configurazione
Tutti i sistemi operativi Microsoft
Effetti:
Uno script web può inviare richieste WebDAV con i privilegi di ci lo ha avviato
Possibili attacchi:
Lo script, nell’ambito delle risorse web disponibili che l’utente possiede, può impersonare l’utente e compiere azioni a suo nome WebDAV: IIS
Bug #2 (2) : Bug #2 (2) Rimedi:
Installare un particolare patch
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=29129
Installare:
Service pack 6a per Windows NT 4.0
Service pack 1 per Windows 2000
Ulteriori informazioni:
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/MS01-022.asp WebDAV: IIS
Bug #3 (1) : Bug #3 (1) Non presente nel sito di Microsoft
Congigurazione:
IIS 4.0 o 5.0
Estensioni di Forntpage 2000 lato server installate
Causa:
esecuzione di uno script ASP/ASA, con inserito nella richiesta GET la stringa "Translate:f" e con aggiungenti alla fine del’URL una serie di slash "../../../../".
WebDAV: IIS
Bug #3 (2) : Bug #3 (2) Effetti:
Si può visualizzare il contenuto dello script
Si può visualizzare il contenuto di un file
Possibili attacchi:
Possibilità di trovare nei file visualizzati informazioni sull’utente e sul sistema
Rimedi:
Installare:
Service pack 1 per Windows 2000 WebDAV: IIS
Server WebDAV minori : Server WebDAV minori Una panoramica sui principali server che supportano WebDAV
Tamino XML Server : Tamino XML Server E’ un server per documenti XML
Ha le funzionalità di un database SQL, interrogabile tramite XML
Mi da comunque la possibilità di memorizzare qualsiasi tipo di dato fino alla dimensione di 1Gb
Ha un modulo, Tamino WebDAV Server, che mi permette l’interfaccia con il mondo WebDAV WebDAV: Server minori
Tamino WebDAV Server (1) : Tamino WebDAV Server (1) E’ basato su una struttura 3-tier
Il client comunica con Apache Server tramite il protocollo WebDAV, il quale tramite i servlet Tomcat comunica con Tamino WebDAV Server
Tamino WebDAV Server comunica con Tamino XML Server tramite HTTP WebDAV: Server minori
Tamino WebDAV Server (2) : Tamino WebDAV Server (2) WebDAV: Server minori
Tamino WebDAV Server (3) : Tamino WebDAV Server (3) E’ un server WebDAV di classe 2, supporta cioè il looking dei file
Tramite la sua struttura interna simile a quella di un database, mi da una maggiore velocità di risposta nella ricerca di risorse tramite le proprietà WebDAV WebDAV: Server minori
Tamino WebDAV Server (4) : Tamino WebDAV Server (4) Mi permette, in accordo con il protocollo WebDAV le seguenti funzioni:
Pubblicazione istantanea dei documenti su web
Lavoro di gruppo
Aggiunta di proprietà da parte di un client ad una determinata risorsa
Gestione di un file system WebDAV: Server minori
Jigsaw : Jigsaw E’ un vero e proprio server web scritto in java
E’ leggermente più lento rispetto ai concorrenti apache e IIS ma gode del vantaggio della portabilità dovuta alla scrittura del suo codice in java WebDAV: Server minori
Tomcat (1) : Tomcat (1) E’ un interfaccia che mi permette di eseguire applicazioni Java lato server che prendonono il nome di servlet
Si appoggia su un server web con il quale comunica tramite il protocollo AJPV12/AJPV13
E’ più efficiente del modulo jserv per apache e mi permette di essere installato su server web Apache, IIS e Netscape WebDAV: Server minori
Tomcat (2) : Tomcat (2) L’architettura è la seguente: WebDAV: Server minori
Tomcat (3) : Tomcat (3) Funzionamento:
Un client web fa una richiesta
Se è un programma java, Apache lo veicola a Tomcat il quale lo esegue generando il codice WebDAV (o normale HTTP) necessario a spedire la pagina
Apache lo spedisce al client
Tomcat include un supporto per WebDAV che abilita l’authoring dei siti web WebDAV: Server minori
Python davserver : Python davserver E’ una collezione di classi con lo scopo di facilitare la costruzione di un server WebDAV in python
Esempio:
Python WebDAV server: E’ un implementazione di un server WebDAV di esempio fatta in python
http://sandbox.xerox.com/webdav/
Il server si trova a quest’indirizzo
http://sandbox.xerox.com:8080
WebDAV: Server minori
WebDAV Server minori : WebDAV Server minori Oracle: Internet File System
Xythos: Web File Server
Novell: Netware 5.1, Net Publisher
Endeavors: Magi-DAV
IBM: DAV4J (DeveloperWorks)
DataChannel: DataChannel Server (DCS 4.1)
Intraspect: 4i
OpenLink: Virtuoso
Hyperwave: Information Server 5.5
WebDAV: Server minori
Sicurezza : Sicurezza Autenticazione
Autorizzazione
Sicurezza : Sicurezza L’utilizzo di WebDAV per condividere risorse comuni in ambito di rete fa sorgere problemi di sicurezza maggiori rispetto all’uso del solo HTTP:
Autenticazione: Riuscire ad identificare con chiarezza chi deve agire su una risorsa
Autorizzazione: Identificare le operazioni che possono essere fatte su una determinata risorsa WebDAV: Auten. – Autor.
Autenticazione (1) : Autenticazione (1) Il problema dell’autenticazione assume un aspetto fondamentale in WebDAV
L’utilizzo di risorse comuni in ambito di rete può essere efficace solo con una corretta identificazione degli attori che saranno interessati a compiere delle operazioni sulle risorse stesse WebDAV: Auten. – Autor.
Autenticazione (2) : Autenticazione (2) Solo tramite una precisa e veritiera autenticazione è possibile mettere delle solide basi per la sicurezza:
Non si permette ad intrusi di personificare una persona che in realtà non sono
E’ l’unica e solida base per sviluppare un meccanismo di autorizzazione WebDAV: Auten. – Autor.
Autenticazione (3) : Autenticazione (3) Sia HTTP che WebDAV, sono due protocolli di livello applicazione nell’architettura ISO/OSI
WebDAV, come estensione del protocollo HTTP, è soggetto a tutte le regole e alle possibilità di autenticazione del protocollo HTTP
WebDAV: Auten. – Autor.
HTTP Basic Authentication (1) : HTTP Basic Authentication (1) La risorsa è protetta da uno username e da una password
La password viaggia in chiaro sulla rete
Se criptata con SSL va bene tutte le volte in cui sia sufficiente come autenticazione la sola coppia username e password WebDAV: Auten. – Autor.
HTTP Basic Authentication (2) : HTTP Basic Authentication (2) Quando il client fa una GET su una risorsa il server risponde con l’errore del client 401 (unauthorized) più un header che specifica il tipo di autenticazione e un reame
HTTP/1.1 401 Unauthorized
Connection: close
Content-Length: 157
Content-Type: text/html
Date: Fri, 29 Oct 1999 09:24:10 GMT
Server: UserLand Frontier/6.1b12-WinNT
WWW-Authenticate: Basic realm="Control Panel" WebDAV: Auten. – Autor.
HTTP Basic Authentication (3) : HTTP Basic Authentication (3) Il client apre una finestra in cui inserire user-name e password e fa una richiesta HTTP in cui la password è codificata in Base64
Authorization: BASIC kheSrkSlrJflvbFvaFfsgHhl user:password WebDAV: Auten. – Autor.
HTTP Digest Authentication : HTTP Digest Authentication Introdotta da HTTP 1.1
La password è spedita codificata con il metodo MD5
Esiste il problema di come memorizzare la prima volta la password nel server
La Digest Authentication non è supportata da tutti i browser WebDAV: Auten. – Autor.
Autenticazione del client su canale SSL (1) : Autenticazione del client su canale SSL (1) Il server si autentica con il client tramite il suo certificato
Viene instaurato perciò un canale SSL sicuro tra client e server
Viene mandata dal server la richiesta di autenticazione con il metodo HTTP Basic Authentication
Dall’utente vengono inserite user-name e password che permettono al client di autenticarsi WebDAV: Auten. – Autor.
Autenticazione del client su canale SSL (2) : Autenticazione del client su canale SSL (2) La password in questo caso viene trasmessa su un canale protetto
Non vi è più alcuna possibilità di sniffing WebDAV: Auten. – Autor.
Usare SSL con WebDAV !!! : Usare SSL con WebDAV !!! E’ altamente consigliabile usare l’autenticazione SSL del server
WebDAV necessita, per via del suo orientamento allo sviluppo collaborativo, di un canale sicuro
Per proteggere la password
Per evitare lo sniffing di dati WebDAV: Auten. – Autor.
Autenticazione del client tramite SSL : Autenticazione del client tramite SSL Un ulteriore passo in avanti può essere fatto con l’autenticazione SSL del client
Il client viene identificato univocamente tramite un certificato
Tale certificato è rilasciato, come anche quello del server, da un Certification Authority che è il garante dell’identità del client e del server WebDAV: Auten. – Autor.
Ulteriore sicurezza di autenticazione : Ulteriore sicurezza di autenticazione Si può aggiungere un ulteriore meccanismo di user-name e password
Per accedere alla risorsa non basta possedere qualcosa (il certificato)
Bisogna anche conoscere qualcosa (la password)
I certificati possono essere salvati in particolari smart-card WebDAV: Auten. – Autor.
Autorizzazione (1) : Autorizzazione (1) Autorizzazione: chi può fare che cosa
Una corretta autenticazione può permettere di sfruttare in modo positivo le proprietà di WebDAV per la gestione dell’autorizzazione
Autenticazione Autorizzazione WebDAV: Auten. – Autor.
Autorizzazione (2) : Autorizzazione (2) Gestione statica:
I permessi di accesso e di modifica sulle varie risorse vengono gestiti dal sistemista del server web
Gestione remota e dinamica:
Sono gli stessi utenti che in remoto, in base ai loro permessi, possono gestire e modificare una struttura che specifichi i vari diritti di accesso WebDAV: Auten. – Autor.
Autorizzazione (3) : Autorizzazione (3) La capacità di WebDAV di aggiungere proprietà alle risorse è alla base della gestione dinamica della struttura di accesso:
Memorizzare chi è il proprietario
Memorizzazione dei permessi di un dato individuo WebDAV: Auten. – Autor.
Autorizzazione (4) : Autorizzazione (4) Purtroppo…
Questo aspetto non