This is an old revision of the document!
Table of Contents
WebDAV
Configurazione standard, secondo questa guida: WebDAV on Apache2.
Per quanto riguarda la sicurezza bisognerebbe proteggere tramite crittografia la password di accesso e anche il contenuto dei file trasferiti. Utilizzando https si protegge entrambi in un colpo solo (eventualmente anche usando la semplice autenticazione AuthType Basic), ma non tutti i client supportano https, notabilmente Windows XP tramite il Connetti untià di rete.
Per questo motivo si potrebbe decidere di utilizzare http e proteggere solo la password tramite AuthType Digest.
Anzitutto è necessario abilitare due moduli Apache: dav e dav_fs (che implementano le funzioni WebDAV su filesystem). Il modulo dav_lock (per gestire il file locking) non è necessario perché dav_fs ha un suo meccanismo nativo più efficiente.
La limitazione principale di questa configurazione è che il modulo gira a nome dell'utente Apache (
www-data in Debian) e non è possibile adottare meccanismi tipo suEXEC per girare a nome di un utente arbitrario, suEXEC infatti funziona solo sull'esecuzione di CGI o FastCGI. Questo comporta la necessità che l'utente www-data abbia i permessi necessari sui file pubblicati.
Autenticazione Basic su https
Alias "/Documenti" /home/samba/documenti/
<Location "/Documenti">
DAV On
AuthType Basic
AuthName "WebDAV"
AuthBasicProvider file
AuthUserFile /etc/apache2/htpasswd
AuthGroupFile /etc/apache2/htgroup
Require group smbdocumenti
</Location>
Autenticazione Digest su http
Alias "/Amministrazione" /home/samba/ammin
<Location "/Amministrazione">
DAV On
AuthType Digest
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
AuthName "WebDAV"
AuthDigestDomain /ammin/
AuthDigestProvider file
AuthUserFile /etc/apache2/htdigest
AuthGroupFile /etc/apache2/htgroup
Require group smbammin
</Location>
WebDAV CGI 0.8.3
L'implementazione WebDAV CGI è un server WebDAV realizzato in Perl, tramite un semplice wrapper con permessi SUID e SGID è in grado di eseguire a nome dell'utente autenticato. A causa del wrapper SUID/SGID non è necessario alcun suEXEC.
Oltre al server WebDAV comprende anche un file manager su interfaccia web, supporta vari tipi di storage per i file (filesystem, SMB/CIFS, …) e supporta diversi tipi di database (usato per ???).
Per il funzionamento non sono necessari i moduli Apache dav e dav_fs, è sufficiente lo script webdav.pl e le librerie da cui dipende. Ecco l'elenco dei pacchetti Debian necessari, come riportato dalla documentazione:
apt-get install libdbi-perl libdbd-sqlite3-perl libtimedate-perl \
libuuid-tiny-perl libxml-simple-perl libquota-perl \
libarchive-zip-perl libgraphics-magick-perl libmodule-load-perl \
libfile-copy-link-perl
ATTENZIONE: in Debian Lenny non sono presenti i pacchetti libuuid-tiny-perl e libfile-copy-link-perl come fare?
Installazione
L'installazione qui descritta prevede:
- Installazione in
/usr/local/share/webdavcgi/. - Compilazione e installazione del wrapper nella DocumentRoot del
VirtualHost. - Autenticazione Basic su https (login/password su file).
- Un
VirtualHosttotalmente dedicato al servizio WebDAV. - Un solo file di configurazione (
) per tutto il servizio WebDAV.
Potrebbe essere utile pubblicare più di una directory WebDAV, in tal caso si aggiunge una regola RewriteRule e un file di configurazione diverso per ognuna.
Questi i passaggi per l'installazione e la compilazione:
cd /usr/local/share tar jxvf /usr/local/download/webdavcgi/webdavcgi-latest.tar.bz2 mv webdavcgi-0.8.3 webdavcgi chown -R root:root webdavcgi cd webdavcgi/helper/ gcc -o webdavwrapper webdavwrapper.c strip webdavwrapper cp webdavwrapper /var/www/webdav.rigacci.org/cgi-bin/ cd /var/www/webdav.rigacci.org/cgi-bin/ chown root:root webdavwrapper chmod 6755 webdavwrapper ln -s /usr/local/share/webdavcgi/cgi-bin/webdav.pl . ln -s /usr/local/share/webdavcgi/cgi-bin/logout-dist logout mkdir /var/lib/webdavcgi chmod 1777 /var/lib/webdavcgi
Configurazione
Questo il file di configurazione per il VirtualHost /etc/apache2/sites-available/webdav.rigacci.org:
#---------------------------------------------------------------
# Private WebDAV access via HTTPS
# https://wabdav.rigacci.org/
#---------------------------------------------------------------
<VirtualHost *:443>
SSLEngine on
ServerName webdav.rigacci.org
ServerAdmin webmaster@rigacci.org
DocumentRoot /var/www/webdav.rigacci.org
ErrorLog /var/log/apache2/webdav.rigacci.org/error.log
CustomLog /var/log/apache2/webdav.rigacci.org/access.log combined
ScriptAlias /cgi-bin/ /var/www/webdav.rigacci.org/cgi-bin/
<Directory "/var/www/webdav.rigacci.org/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
RewriteEngine On
RewriteRule /logout /cgi-bin/logout [PT,L]
# With this the root WebDAV service is handled with just one configuration.
#RewriteRule ^/ /cgi-bin/webdavwrapper \
# [PT,E=WEBDAVCONF:/etc/apache2/webdavcgi/webdav.conf,E=PERLLIB:/usr/local/share/webdavcgi/lib/perl,L]
# Instead of sharing at the root level, we can share several subdirectories,
# the root level can be used as a plain HTML index in this case.
# A WebDAV request for "/documenti" will serve the $DOCUMENT_ROOT specified in configuration file.
# An HTTP request for "/documenti" will serve the web interface.
# Add the trailing slash to directory request, to aviod "404 Not Found" error.
RewriteRule ^/documenti$ /documenti/ [L,R=301]
RewriteRule ^/documenti/ /cgi-bin/webdavwrapper \
[PT,E=WEBDAVCONF:/etc/apache2/webdavcgi/documenti.conf,E=PERLLIB:/usr/local/share/webdavcgi/lib/perl,L]
</VirtualHost>
# Directory is protected using Basic authetication. Do it outside VirtualHost
# to enforce it also for other misconfigured VirtualHost(s).
<Directory /var/www/webdav.rigacci.org>
SSLRequireSSL
AuthType Basic
AuthName "WebDAV space"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Directory>
Infine il file di configurazione del CGI (/etc/apache2/webdavcgi/documenti.conf):
## the install base is needed to find webdav-ui.* and locale files
## (don't forget the trailing slash):
$INSTALL_BASE = '/usr/local/share/webdavcgi/';
## the backend module (supported: FS, AFS, GFS, SMB, DBB):
$BACKEND = 'FS';
## this must be the same as the left part of RewriteRule:
$VIRTUAL_BASE = '/documenti/';
## the WebDAV shared directory:
$DOCUMENT_ROOT = '/home/samba/documenti/';
$UMASK = 0077;
$DBI_SRC='dbi:SQLite:dbname=/var/lib/webdavcgi/webdav.'.$ENV{REMOTE_USER}.'.db';
$DBI_USER='';
$DBI_PASS='';
$CREATE_DB = !-e '/var/lib/webdavcgi/webdav.'.$ENV{REMOTE_USER}.'.db';
$LOGFILE='/tmp/webdavcgi.log';
#$DEBUG = 1;
## add the logout link into the web interface:
$HEADER = '<div class="header">WebDAV CGI - Web interface: You are logged in as <span title="'.`id -a`.'">'
.$ENV{REMOTE_USER}.'</span> (<a href="/logout">Logout</a>).</div>';
#$ENABLE_THUMBNAIL = 0;
#$ENABLE_COMPRESSION = 0;
#$ALLOW_SEARCH = 0;
Tale configurazione abilita anche il logout dall'interfaccia web: viene aggiunto nella directory CGI-BIN un link allo script logout-dist chiamato logout, aggiunge una RewriteRule nella configurazione di Apache e definisce uno header personalizzato per l'interfaccia web.
Attivando il $DEBUG vengono scritte diverse informazioni nell'error.log del VirtualHost.
Il cgi-bin fornisce anche un'interfaccia sfogliabile con un normale browser, basta puntarlo all'URL soggetto alla RewriteRule.
Vengono creati dei file durante le normali operazioni: dei database SQLite (in /var/lib/webdavcgi/) per ogni utente che si connette via WebDAV (non via interfaccia web) e delle miniature (in /tmp/) per ogni documento sfogliato. I bookmark vengono creati e salvati lato client tramite cookie.
WebDAV CGI 1.1.2 Beta
La nuova versione WebDAV CGI è sostanzialmente diversa, tanto per dire richiede un database di backend. In considerazione dell'uso personale che se ne vuole fare, si è optato per SQLite3, ma sarebbe supportato anche PostgreSQL.
