Storage online sicuro con Webdav e EncFS

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"

Introduzione

Negli ultimi anni i servizi di storage online stanno diventando sempre più numerosi e largamente utilizzati. Quasi tutti sono, però, servizi basati su tecnologie proprietarie e offerti gratuitamente agli utenti con alcune limitazioni d'uso (spesso relative soprattutto ai limiti di spazio utilizzabile) per superare le quali è richiesta la sottoscrizione di un abbonamento. Questa guida si prefigge di fornire un'alternativa libera ai vari servizi proprietari di storage online. Tutto quello che serve è avere a disposizione un server Debian da poter gestire in piena autonomia e con una connettività a banda larga abbastanza generosa, soprattutto per quanto riguarda la velocità di upload. La soluzione di seguito proposta si basa su webdav, un'estensione del protocollo http che rende possibile la gestione in lettura e scrittura dei file sul web server. Nella guida verrà spiegato anche come poter accedere dai client alla risorsa webdav configurata sul server e come mettere in sicurezza i file tramite il meccanismo di crittografia offerto da encfs.

Configurazione lato server

Prima di tutto è necessario avere un server su cui è attivo apache, per cui, se ancora non è presente, installiamolo con

# aptitude install apache2-mpm-prefork

Bisogna poi abilitare i moduli dav e dav_fs per far sì che apache possa gestire le estensioni webdav.

# a2enmod dav
# a2enmod dav_fs

Per accedere tramite webdav ai file remoti sarà necessaria un'autenticazione che verrà gestita direttamente da apache. A tale scopo, per evitare che le credenziali di accesso vengano trasmesse in chiaro, abilitiamo anche il modulo auth_digest con

# a2enmod auth_digest

A questo punto bisogna creare il database degli utenti per l'autenticazione di tipo digest. Tale tipo di autenticazione richiede tre valori: username, realm e password. Con realm si intende figurativamente il "territorio" in cui un dato utente può operare e tale valore può essere deciso arbitrariamente. Per esempio per creare l'utente metaldaze nel realm webdav si deve eseguire il comando

# htdigest -c /etc/apache2/htdigest webdav metaldaze

e inserire la password per l'utente.

L'opzione -c indica che verrà creato un nuovo database degli utenti nel file indicato (nel caso dell'esempio /etc/apache2/htdigest) e, ovviamente, deve essere usata solo se tale file ancora non esiste. Se, per esempio, volessimo in seguito aggiungere o modificare un utente dovremmo usare il comando

# htdigest /etc/apache2/htdigest realm nomeutente

sostituendo a realm e nomeutente i valori appropriati.

Fatto ciò, dobbiamo creare la directory che conterrà i file accessibili tramite webdav, assegnare i permessi di scrittura all'utente www-data con

# mkdir /var/www/webdav
# chgrp www-data /var/www/webdav
# chmod g+rwx /var/www/webdav

e creare il file /etc/apache2/sites-available/webdav per la configurazione del virtualhost di apache con il seguente contenuto

<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	ServerName webdav.miodominio.it
	DocumentRoot /var/www/webdav
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/webdav>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride all
		Order allow,deny
		allow from all

		Dav On
		AuthType Digest
		AuthName webdav
		AuthDigestDomain /
		AuthDigestProvider file
		AuthUserFile /etc/apache2/htdigest
		Require valid-user

	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/webdav.error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog ${APACHE_LOG_DIR}/webdav.access.log combined

</VirtualHost>

Come ServerName deve essere indicato un nome dns valido e come AuthType bisogna specificare il realm indicato con il comando htdigest in fase di creazione degli utenti.

Abilitiamo, a questo punto, il virtualhost con

# a2ensite webdav

e riavviamo apache per rendere attive le modifiche effettuate

# service apache2 restart

Configurazione lato client

Una volta che il servizio webdav sul server è configurato e funzionante, non resta che capire come poter accedere dai client. Esistono diversi strumenti che consentono di accedere alle risorse webdav, primo fra tutti il client cadaver che è uno strumento a linea di comando con una sintassi simile a ftp. Lo scopo di questa guida, però, è quello di poter gestire la risorsa remota come se fosse un file system locale, condizione essenziale, tra l'altro, per poter utilizzare la crittografia offerta da encfs. In Debian sono presenti due strumenti che consentono di montare una risorsa webdav sul file system locale e che sono adatti allo scopo di questa guida: davfs2 e fusedav, entrambi con pregi e difetti. Il primo utilizza un meccanismo di caching dei file che, se opportunamente configurato, permette di limitare il traffico di rete generato: se un file è presente nella cache locale e risulta uguale al corrispondente file sul server viene utilizzata direttamente la copia locale. L'aspetto negativo di davfs2 è che non sembra andare troppo d'accordo con i file manager grafici: durante le operazioni di download e upload dei file, l'interfaccia dei file manager rimane in una condizione di freeze fino al termine dell'operazione di trasferimento. Fusedav, invece, non utilizza una cache, il che implica che ogni file che viene aperto dal client deve essere scaricato. Il lato positivo, però, è che fusedav sembra essere un po' più amichevole nei confronti dei file manager grafici. Di seguito vedremo come configurare e utilizzare entrambi gli strumenti citati, così che ognuno possa decidere quale sia il più adatto alla sua particolare esigenza.

Montare la risorsa webdav con davfs2

Installiamo davfs2 con il comando

# aptitude install davfs2

Per far sì che anche un utente non privilegiato possa montare la risorsa remota, bisogna aggiungere l'utente al gruppo davfs2 con

# adduser nomeutente davfs2

e abilitare il bit SUID sul file /usr/sbin/mount.davfs. Per fare ciò possiamo lanciare

# dpkg-reconfigure davfs2

e rispondere affermativamente alla domanda che ci viene posta. Creiamo, quindi, il punto di mount per la risorsa webdav

# mkdir /mnt/webdav

e inseriamo la seguente linea, opportunamente adattata, in /etc/fstab

http://webdav.miodominio.it	/mnt/webdav	davfs	rw,noauto,users	0	0

Non ci resta che montare la risorsa con il comando

$ mount /mnt/webdav

e inserire nome utente e password quando richiesto.

Ottimizzazione per utilizzo con file manager grafici

Come si legge nelle FAQ di davfs2, quando si utilizza un file manager grafico come nautilus, konqueror, thunar, ecc. si possono notare notevoli rallentamenti. Questo accade perché questi programmi tendono ad aprire i file per valutarne il contenuto il che implica, ovviamente, che i file vengano scaricati completamente generando un inutile traffico e causando degli apparenti blocchi anche se, per esempio, è stato semplicemente selezionato un file. Tale inconveniente è molto più evidente con file di grandi dimensioni (nel caso di una risorsa remota anche pochi MB possono essere tanti). Davfs2 permette di limitare questo problema con l'opzione gui_optimize. Inoltre, soprattutto se la directory remota contiene numerosi file di grandi dimensioni, potrebbe essere necessario intervenire sui parametri di gestione della cache aumentandone la dimensione (di default è impostata a 50MB): se un file è presente nella cache e la sua versione remota non è stata modificata non deve essere scaricato nuovamente per poter essere aperto. Per abilitare le modifiche suddette dobbiamo inserire (o modificare) le seguenti opzioni nel file /etc/davfs2/davfs2.conf

cache_size      500
gui_optimize	1

eventualmente adattando la dimensione della cache (espressa in MB) secondo le nostre esigenze.

Montare la risorsa webdav con fusedav

Installiamo fusedav con

# aptitude install fusedav

Per consentire ad un utente non privilegiato la possibilità di usare fusedav è necessario aggiungerlo al gruppo di sistema fuse. Per montare la risorsa basta lanciare

$ fusedav http://webdav.miodominio.it /mnt/webdav

Il punto di mount (in questo caso /mnt/webdav) ovviamente deve esistere e deve essere scrivibile dall'utente che esegue il comando sopra indicato. In caso di errori relativi ai permessi, quindi, occorre effettuare le opportune modifiche con i comandi chown e chmod, oppure scegliamo un punto di mount creato all'interno della nostra home. La risorsa rimane montata fino a che il processo fusedav rimane in esecuzione. Per smontare la risorsa possiamo o interrompere il processo premendo CTRL+C oppure usare il comando

$ fusermount -u /mnt/webdav

Rendere sicura la risorsa webdav con la crittografia dei file

Una volta che abbiamo montato la nostra risorsa webdav e che possiamo accedere ai file ivi ospitati (quasi) come se accedessimo a dei file locali, possiamo occuparci di come mettere in sicurezza il nostro spazio di archiviazione remoto. Per fare ciò, come già accennato, useremo encfs. Installiamolo con

# aptitude install encfs

Encfs per poter lavorare ha bisogno di due directory: una sorgente, che conterrà i file cifrati, e un punto di mount che sarà la directory che conterrà i file in chiaro. La sorgente nel nostro caso corrisponderà al punto di mount della risorsa webdav (nell'esempio /mnt/webdav), mentre il punto di mount dobbiamo crearlo, per esempio, con

$ mkdir /home/nomeutente/webdav

Per usare encfs, quindi, lanciamo il comando

$ encfs /mnt/webdav /home/nomeutente/webdav

La prima volta che questo comando viene eseguito otterremo il seguente output:

Creazione nuovo volume cifrato.
Scegliere tra una delle seguenti opzioni:
 digitare "x" per la modalità di configurazione per esperti,
 digitare "p" per la modalità paranoica preconfigurata.
 qualsiasi altra cosa o una riga vuota selezionerà la modalità standard.
?> 

Premiamo invio per accettare la modalità standard (vi rimando alla lettura del man di encfs per la spiegazione delle altre opzioni disponibili).

A questo punto in /home/nomeutente/webdav possiamo cominciare a copiare qualche file di prova e ci renderemo conto che sotto /mnt/webdav verranno creati gli stessi file, ma cifrati (di default viene cifrato anche il nome del file). Se guardiamo con attenzione, noteremo anche che sotto /mnt/webdav esiste un file xml nascosto (.encfs6.xml) che descrive le caratteristiche della cifratura usata da encfs per la modalità scelta (nel nostro caso la standard). Questo file xml è importantissimo e non va rimosso, pena l'impossibilità di decifrare i file presenti nella directory scelta come sorgente per encfs.

Per smontare la risorsa montata con encfs, possiamo, analogamente a quanto indicato per fusedav, usare il comando fusermount.




Guida scritta da: Metaldaze   Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized