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
VirtualHost
totalmente 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.