Tutorial

Backup con SSH su Debian/Ubuntu in ambiente cloud: Duplicity

I server di hosting con tecnologia cloud vengono spesso utilizzati per effettuare dei backup, anche incrementali e criptati, con molteplici opzioni aggiuntive: per farlo si può utilizzare Duplicity, un software adibito a tale scopo che funziona da linea di comando SSH. Duplicity funziona mediante GnuPG, tar ed rdiff, trasmette i dati mediante ssh o scp, FTP, Amazon S3, rsync ed accesso locale ai file. Si assume nel seguito di disporre sia di una locazione remota (VPS o dedicato) di cui vogliamo una copia di sicurezza periodica, sia di un cloud hosting che permetta di memorizzare le copie progressivamente. Per effettuare l’operazione sfrutteremo delle chiavi crittografiche e la protezione delle connessioni mediante SSH.

Tutti i sistemi informatici basati su crittografia si basano su una passphrase, che è come se fosse una password riservata di accesso solo che, in generale, è più lunga. Per installare Duplicity si ricorre quindi alla seguente istruzione (ovviamente previo accesso ad SSH come spiegato qui):

apt-get install duplicity

il che produrrà un output del genere:

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  librsync1 python-crypto python-gnupginterface python-paramiko
Suggested packages:
  python-boto ncftp python-pexpect python-cloudfiles python-gdata tahoe-lafs
  python-crypto-dbg python-crypto-doc
The following NEW packages will be installed:
  duplicity librsync1 python-crypto python-gnupginterface python-paramiko
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,735 kB of archives.
After this operation, 10.4 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://mirrors.kernel.org/debian/ stable/main librsync1 amd64 0.9.7-9 [72.1 kB]
Get:2 http://mirrors.kernel.org/debian/ stable/main python-gnupginterface all 0.3.2-9.1 [21.0 kB]
Get:3 http://mirrors.kernel.org/debian/ stable/main duplicity amd64 0.6.18-3 [309 kB]
Get:4 http://mirrors.kernel.org/debian/ stable/main python-crypto amd64 2.6-4 [524 kB]
Get:5 http://mirrors.kernel.org/debian/ stable/main python-paramiko all 1.7.7.1-3.1 [809 kB]
Fetched 1,735 kB in 6s (262 kB/s)
Selecting previously unselected package librsync1:amd64.
(Reading database ... 36532 files and directories currently installed.)
Unpacking librsync1:amd64 (from .../librsync1_0.9.7-9_amd64.deb) ...
Selecting previously unselected package python-gnupginterface.
Unpacking python-gnupginterface (from .../python-gnupginterface_0.3.2-9.1_all.deb) ...
Selecting previously unselected package duplicity.
Unpacking duplicity (from .../duplicity_0.6.18-3_amd64.deb) ...
Selecting previously unselected package python-crypto.
Unpacking python-crypto (from .../python-crypto_2.6-4_amd64.deb) ...
Selecting previously unselected package python-paramiko.
Unpacking python-paramiko (from .../python-paramiko_1.7.7.1-3.1_all.deb) ...
Processing triggers for man-db ...
Setting up librsync1:amd64 (0.9.7-9) ...
Setting up python-gnupginterface (0.3.2-9.1) ...
Setting up duplicity (0.6.18-3) ...
Setting up python-crypto (2.6-4) ...
Setting up python-paramiko (1.7.7.1-3.1) ...
Processing triggers for python-support ...

Per eseguire backup periodici in automatico, dunque, ci serve una chiave ssh che possiamo creare in prima istanza in questo modo:

ssh-keygen -t rsa

La passphrase può essere impostata da terminale dopo aver premuto Invio, ed essa potrebbe in generale essere anche vuota (sconsigliato): per impostare il valore della passphrase esplicitamente si ricorre ad un’istruzione del genere:

sudo apt-get install keychain

poi si va ad editare il bash-profile dell’utente:

vi $HOME/.bash_profile

e si aggiungono nel file in questione le direttive seguenti:

/usr/bin/keychain --clear  $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh

Per creare chiavi GPG andiamo ad installare sul VPS cloud:

apt-get install gnupg

e poi andiamo a creare le chiavi per il backup sempre da terminale remoto:

gpg --gen-key

il che produrrà, questa volta, un output simile nel quale ci sarà richiesta conferma delle operazioni:

gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: keyring `/root/.gnupg/secring.gpg' created
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Home Nas Server
Email address: root@nas01
Comment: Home Nas Server Backup
You selected this USER-ID:
    "Home Nas Server (Home Nas Server Backup) <root@nas01>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

se andiamo a listare le chiavi di sistema, a questo punto:

gpg --list-keys

prenderemo nota di 3AABBCC7 (di seguito un esempio di output):

/root/.gnupg/pubring.gpg
------------------------
pub   4096R/3AABBCC7 2013-10-04
uid                  Home Nas Server (Home Nas Server Backup) <root@nas01>
sub   4096R/12345678 2013-10-04

Per effettuare il backup sicuro e criptato dei file su cloud.esempiosito.com, ad esempio, andiamo a scrivere:

duplicity /home/miacartella/ scp://utente@cloud.esempiosito.com/backup

Per escludere file (o directory) dal backup si usa l’opzione –exclude:

duplicity --exclude /tmp/ --exclude /proc/ --exclude /nas/ \
--exclude /jails/ --exclude /mnt/ / scp://utente@cloud.esempiosito.com/backup

che esclude tmp, proc, nas, jails, mnt e copia invece tutto il resto; viceversa per includere file si usa –include, che in questo esempio copierà soltanto /home/, /root/, /etc/, e /var/spool/cron/ dal server remoto fino al nostro cloud server che stiamo utilizzando per il backup:

duplicity --include /home/ --include /root --include /etc/ \
--include /var/spool/cron/ --exclude '**' / scp://utente@cloud.esempiosito.com/backup

Per eseguire un backup completo criptato si scriverà:

duplicity full --encrypt-key="3AABBCC7" /home/miacartella/ scp://utente@cloud.esempiosito.com/backup

mentre invece per un backup incrementale e criptato:

duplicity incr --encrypt-key="3AABBCC7" /home/miacartella/ scp://utente@cloud.esempiosito.com/backup

per vedere infine i file memorizzati nell’archivio si sfrutterà la chiave annotata in precedenza:

duplicity list-current-files --encrypt-key="3AABBCC7" scp://utente@cloud.esempiosito.com/backup

mentre per verificare l’integrità del backup:

duplicity verify --encrypt-key="3AABBCC7" scp://utente@cloud.esempiosito.com/backup /home/miacartella

il comando successivo, inoltre, permette di economizzare lo spazio su disco del server cloud di backup eliminando dopo 30 giorni i backup vecchi:

duplicity remove-older-than 60D --encrypt-key="3AABBCC7" --force scp://utente@cloud.esempiosito.com/backup

Per recuperare un backup in caso di necessità si eseguono i comandi riportati:

mkdir /home/miacartella/
duplicity --encrypt-key="3AABBCC7" scp://utente@cloud.esempiosito.com/backup /home/miacartella/

Ovviamente parametri dei comandi come utente, cloud.esempiosito.com e home/miacartella devono essere adeguatamente rimpiazzati a seconda dei casi durante l’uso pratico delle istruzioni che abbiamo pubblicato.

Tags
Mostra altro

Ti potrebbe interessare anche

Lascia un commento

Back to top button