22 dicembre 2017

tutorial: come configurare caldav, carddav e webdav sul raspberry pi 3


Benvenuti!
Questo tutorial vi fornirà una guida su come configurare server CalDAV, CardDAV e WebDAV sul raspberry pi 3 al fine di permettere la sincronizzazione di Calendario, Rubrica e Documenti tra più dispositivi eterogenei (smartphone Android o iOS, PC, etc...) e/o mantenerne un backup su di un proprio Cloud privato domestico.

Nota: il presente articolo contiene una infarinatura generale ed alcuni dettagli sono stati tralasciati. Se volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto il video di supporto a questa guida che ho pubblicato sul mio canale YouTube:


Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per configurare server compatibili con i protocolli *DAV occorrono:
  • un Raspberry Pi 3 + una microSD + un alimentatore (da almeno 2.1A)
  • Raspbian OS Lite
  • un PC o smartphone o tablet
  • un router + una connessione ad internet

Per quanto riguarda il primo punto non occorre altro: il raspberry pi verrà acceduto via SSH per la configurazione generale e poi sarà attivo e non richiederà alcun altro tipo di intervento (neanche da remoto). Sarà invece indispensabile avere un alimentatore che eroghi in uscita almeno 2.1A.
Raspbian OS Lite è probabilmente la scelta migliore poiché è un sistema leggero, consuma poche risorse ed ha la possibilità di farci installare dai repository tutti i tool necessari.
Il PC o lo smartphone/tablet saranno gli strumenti su cui andremo a sfruttare i vari calendari, rubrica e file condivisi.
Serve commentare il quarto punto? :-)


2. l'idea


L'idea che c'è alla base del tutorial è quella di creare un pool di servizi, legati alla gestione di Contatti, Calendari e Condivisione di File in Rete, che in qualche modo possano sostituire con successo soluzioni offerte da provider terzi. Ci sarebbe un quarto ulteriore servizio che per completezza dovrebbe essere aggiunto ad essi, la Posta Elettronica, che però non sarà oggetto di questo tutorial.

Google, Apple, Microsoft e tanti altri offrono più o meno gratuitamente un set di servizi web che consentono di avere contatti, documenti, calendari (ed email) sincronizzati tra più dispositivi e sempre backuppati sul Cloud. Lo stack Google è sicuramente quello più completo e probabilmente più diffuso (Gmail + Calendar + Contacts + Drive) e si va a scontrare con l'offerta di Microsoft (Outlook per email, contatti e calendario + OneDrive) oppure con l'offerta di Apple (che passa tutta per iCloud). Ovviamente di proposte alternative e simili a queste ce ne sono una miriade online: magari non tutte fornite dallo stesso provider, ma in generale non è difficile trovarne sia a pagamento, sia gratuite. Spesso, però, il compromesso a cui si deve cedere è quello di non essere a conoscenza di cosa venga fatto con i dati personali che vengono riversati su tali servizi.

Visto che la questione privacy è giustamente molto sentita, perché non crearsi in casa un sistema che possa in qualche modo farci evitare di diffondere in rete dati personali, ma allo stesso tempo consenta comunque di condividerli tra più dispositivi o quantomeno di tenerli sempre salvati in un Cloud privato remoto? Con un Raspberry Pi 3 più qualche tool è possibile ottenere tutto ciò!
Esistono soluzioni all-in-one, come NextCloud (ve ne ho parlato in questo tutorial), che in qualche modo tra plug-in, estensioni e quant'altro riescono a coprire le varie esigenze, o quasi. Esiste però un'altra strada che può risultare più interessante per chi non voglia installare sistemi pachidermici e "complessi" come può essere NextCloud per coprire magari solo una tra le necessità oggetto del tutorial.


3. CalDAV + CardDAV = Radicale


Questi due protocolli solitamente viaggiano assieme e permettono di gestire calendari, task o reminder, e tenere sincronizzata una rubrica di contatti. I due protocolli sono "completi", nel senso che permettono di gestire più utenti, più calendari, la condivisione degli stessi, i vari permessi di accesso e modifica, e qualsivoglia altra operazione di gestione possa venire in mente. Ma sono soltanto protocolli ed il funzionamento generale sarà legato alle implementazioni che i vari client e server utilizzati ne fanno.
Per gestire la parte server su raspberry pi 3 è possibile utilizzare Radicale che è una implementazione semplice e sufficientemente completa di un server CalDAV/CardDAV.

I passi base da eseguire per configurare un pi 3 sono i soliti:
  1. va scaricato Raspbian OS Lite
  2. va configurato l'accesso via SSH così da poter entrare da remoto via PC ed effettuare le varie configurazioni del caso
  3. va impostato un indirizzo IP statico, con il comando sudo nano /etc/dhcpcd.conf è possibile accedere al file di configurazione, quindi alla fine dello stesso aggiungere le seguenti istruzioni:
    • interface eth0 #wlan0 se si vuole sfruttare il wi-fi
    • static ip_address=192.168.1.201/24 #utilizzare la sottorete del router
    • static routers=192.168.1.1 #indirizzo IP del router
    • static domain_name_servers=192.168.1.1 8.8.8.8 #indirizzo IP del router

    Nota
    : per impostare l'indirizzo IP statico per la scheda Wi-Fi occorrerà dapprima configurarne l'accesso alla rete

  4. se si vuole accedere da al di fuori della propria rete domestica, allora va configurare il proprio router affinché redirezioni le richieste provenienti dall'esterno sulle porte utilizzate da Radicale (5232) e Apache (80) verso l'indirizzo IP statico impostato sul pi 3. Questa configurazione dipende dallo specifico router utilizzato

Una volta completati i passi base, con il comando sudo apt-get install radicale verrà installato e configurato Radicale. Quindi con sudo service radicale stop ne andrà temporaneamente bloccata l'esecuzione al fine di poterne modificare le configurazioni base. Esse sono presenti nel file config situato nel path /etc/radicale/config. Questo file contiene tantissime opzioni che per lo scopo di questo tutorial non saranno analizzati in dettaglio, per approfondimenti si rimanda alla documentazione sul sito ufficiale del progetto dove sono spiegate per filo e per segno. In questo file vanno indicati gli eventuali utenti abilitati all'accesso ai calendari ed ai contatti, il tipo di autenticazione desiderata, il path in cui salvare tutti i dati condivisi e con quale formato (magari su DB), e tantissime altre opzioni. Al momento, comunque, può essere lasciata intatta la configurazione predefinita che non prevede né utenti e né autenticazioni particolari, e salverà i dati in semplici file testuali non criptati sul path /var/lib/radicale/collections.

Con il comando sudo service radicale start si può riavviare il server con le eventuali nuove modifiche apportate. A questo punto il gioco è praticamente fatto: sarà sufficiente configurare i device sui quali si vuole sincronizzare contatti, calendario e task/reminder, aggiungendo il server CalDAV/CardDAV in esecuzione via Radicale su raspberry pi.

Nota: occorre impostare correttamente alcuni parametri affinché il tutto funzioni a dovere. Ad esempio, iOS non permette una configurazione particolarmente approfondita, il che significa che alcuni dettagli rimangono ignoti. Al contrario, altri sistemi permettono (o addirittura obbligano) a configurare ogni minimo dettaglio.

Nel video riportato ad inizio articolo è presente un esempio di sincronizzazione di Calendari e Contatti tra quattro sistemi operativi differenti: Android, MeeGo, iOS e SailfishOS. Di questi, Android non ha il supporto nativo per CalDAV/CardDAV (forse alcune personalizzazioni di produttori terzi potrebbero averlo) ma in generale, per risolvere tale mancanza, esiste un tool chiamato DAVdroid che è scaricabile o a pagamento dal Play Store oppure gratuitamente dallo store F-Droid che permette di aggiungere account CalDAV e CardDAV e di tenerli sincronizzati con Calendario e Rubrica del telefono. SailfishOS ed iOS, invece, hanno il supporto nativo e perfettamente integrato nel sistema sia con CalDAV che con CardDAV; infine, MeeGo (ormai purtroppo defunto) aveva ed ha tuttora il supporto soltanto per CalDAV.

Nota: come specificato in precedenza il funzionamento ed il set di funzioni a disposizione dipendono fortemente dall'implementazione lato client: se determinati client non dovessero supportare alcune funzioni, beh, esse chiaramente non saranno presenti.

Per quanto riguarda la sincronizzazione dei dati, essa dipenderà dalle impostazioni del server e da quelle dei client che si utilizzano: generalmente essa è o manuale oppure automatizzata ad intervalli predeterminati. Questa impostazione varia tra sistema operativo e/o client utilizzato: ad esempio in SailfishOS e MeeGo la si trova nelle impostazioni degli account. Su Android va impostata all'interno di DAVDroid. Infine, iOS ha soltanto la possibilità di sincronizzazione automatica in simil-push, nel senso che non è in effettivo tempo reale: sarà il sistema operativo a decidere autonomamente quando effettuarla e non darà alcun altra possibilità di impostazione personalizzata all'utente.

La configurazione utilizzata nell'esempio, lo ribadisco, non prevede né l'uso di utenti né di autorizzazioni o permessi particolari, quindi qualunque dispositivo si connetta al server Radicale potrà potenzialmente accedere a tutti i contatti e tutti i calendari presenti. Attenzione quindi a configurare con precisione utenti, autenticazioni, permessi e quant'altro. Questo passo è fondamentale al fine di garantire un minimo di sicurezza dei propri dati personali. Inoltre va protetto l'accesso al raspberry pi, banalmente cambiando almeno le credenziali di accesso.


4. WebDAV via Apache


Per aggiungere al nostro stack di servizi anche quello di condivisione remota di documenti, occorre creare una cartella sul raspberry pi 3 che consenta lo scambio di file in rete. Qui viene incontro WebDAV, che ancora una volta è un protocollo e specifica come creare, modificare e muovere documenti su un server remoto. Una sua peculiarità è quella di tenere traccia di chi ha effettuato tutte le operazioni e quando, più una serie di informazioni aggiuntive.

Lato server in questo caso sarà sufficiente Apache con apposite mod abilitate all'uso. Lato client, invece, non c'è molto da fare visto che gran parte dei sistemi operativi (Linux, Mac e Windows) integrano nativamente il supporto a WebDAV (semplicemente accedendo all'indirizzo IP assegnato al raspberry pi). Su smartphone, invece, esistono tantissimi client (anche gratuiti) perfettamente compatibili con tale protocollo ed installabili direttamente dai vari store.

Per installare Apache è sufficiente digitare il comando sudo apt-get install apache2, quindi al termine dell'installazione digitare sudo a2enmod dav dav_fs auth_digest ed infine sudo service apache2 restart per riavviare il server ed effettivamente abilitare i moduli indicati.
A questo punto va effettuata una piccola configurazione specifica affinché una cartella del filesystem sul pi 3 possa divenire accessibile tramite il protocollo WebDAV. Il primo passo sarà proprio quello di creare tale cartella di condivisione:
  1. creazione con il comando sudo mkdir /var/www/web/webdaw
  2. assegnazione all'utente con cui viene eseguito Apache con il comando sudo chown www-data:www-data /var/www/web/webdav

Va creata una nuova configurazione apposita per WebDAV nella cartella /etc/apache2/sites-available chiamata ad esempio webdav.conf ed al suo interno va inserito il seguente blocco:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/web/webdav/
        <Directory /var/www/web/webdav/>
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        Alias /webdav /var/www/web/webdav
        <Location /webdav>
           DAV On
           AuthType Basic
           AuthName "webdav"
           AuthUserFile /var/www/webdav/passwd.dav
           Require valid-user
       </Location>
</VirtualHost>

Nota: i punti importanti di questo file sono principalmente la specifica del path WebDAV, cioè la cartella creata poc'anzi, ed il metodo di autenticazione per accedervi che richiede un file contenente le password.

Proprio il file contenente le password va generato con l'elenco di tutti gli utenti che si vuole abilitare all'accesso. Con il comando sudo htpasswd -c /var/www/web/passwd.dav [utente] si può aggiungere una entry in tal file per ogni [utente] desiderato. Il comando va ripetuto per ogni utente ed ogni volta verrà automaticamente richiesta anche la password relativa da assegnarli. Finita l'aggiunta di tutti gli utenti desiderati, con il comando sudo chown www-data:www-data /var/www/web/passwd.dav e poi sudo chmod 640 /var/www/web/passwd.dav si darà accesso e proprietà del file all'utente utilizzato per eseguire Apache.

Gli ultimi passi consistono nell'abilitare la configurazione su creata con la sequenza di passi: sudo a2ensite webdav e sudo a2dissite 000-default; quindi va riavviato Apache con sudo service apache2 restart, e l'installazione sarà completata.

Per testare il tutto può essere utilizzato un qualsiasi client WebDAV, così come mostrato nel video riportato ad inizio articolo. In esso è trovate una demo con cadaver (sudo apt-get install cadaver) in esecuzione sul pi 3 ed ES File Explorer in esecuzione su Android.

Anche in questo caso valgono le stesse considerazioni del paragrafo precedente: la configurazione utilizzata nell'esempio non limita Apache. Attenzione quindi a configurarlo con precisione. Questo passo è fondamentale al fine di garantire un minimo di sicurezza dei propri dati personali. Inoltre va protetto l'accesso al raspberry pi, banalmente cambiando almeno le credenziali di accesso.


5. conclusioni


In questa sede non è trattato l'ultimo tassello del puzzle, il server email, perché a differenza degli altri tre protocolli l'installazione prevede una configurazione di diversi tool e soprattutto la messa in atto di parecchi accorgimenti di sicurezza. Qualora foste interessati ad approfondire anche la creazione di un server mail, fatemelo sapere nei commenti e tramite il sondaggio presente nel video.

Bene: come indicato ad inizio guida, alcuni aspetti sono stati appositamente lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o del video ad esso correlato, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

Nessun commento:

Posta un commento