web-dev-qa-db-fra.com

Automatisation des sauvegardes de duplicité à l'aide de cron

Comment automatiser les sauvegardes de duplicité à l'aide de cron en utilisant le cryptage gpg et le backend ssh?

6
ppetraki

Contexte

Référence originale: http://peterpetrakis.blogspot.com/2013/06/automating-and-encrypting-duplicity.html

Après avoir subi des pertes de données et du piratage informatique sur le stockage, il est conseillé de procéder à des sauvegardes régulières. Je voulais la redondance en cas de panne de mon serveur local et je voulais chiffrer mes sauvegardes à l'aide d'une clé gpg protégée par mot de passe.

La solution actuelle utilise une phrase secrète conservée en texte brut en dehors du chemin de sauvegarde. Je prévois d’envisager de déplacer la clé gpg vers une carte à puce et d’utiliser une clé pour le déverrouiller. Si quelqu'un a des solutions supplémentaires, veuillez les décrire en détail.

Persistance des variables environnementales requises

Exécuter quoi que ce soit à partir de cron le détache de votre environnement actuel, vous perdez toutes les variables décrivant des éléments tels que votre agent spg-agent gpg, ce dont vous avez besoin pour commencer à communiquer avec le serveur distant.

J'ai adopté une approche simple, dans mon ~ .bashrc, j'ai créé ce qui suit.

cat> ~/.backenvrc << EOF 
 # utilisé par le script de sauvegarde crontab 
 exportation SSH_AGENT_PID = $ SSH_AGENT_PID 
 exportation SSH_AUTH_SOCK = $ SSH_AUTH_SOCK 
 exportation GPG_AGENT_INF. 
 export GPGKEY = XXX-insérer-votre-clé-gpg-ici-XXX 
 EOF 

et sourcez simplement ceci à partir du script de sauvegarde référencé dans ma crontab, il suffit simplement de vous connecter une fois pour peupler ce fichier.

Mise en place de la crontab

 # crontab -l 
 # mh commande mon dow commande 
 MAILTO = ppetraki @ localhost 
 BACKUP =/home/ppetraki/Documents/System/Backup 
 # 
 0 0 * * */usr/bin/crontab -l> $ SAUVEGARDE/crontab-backup 
 0 0 * * */usr/bin/dpkg --get-selections> $ SAUVEGARDE/logiciel installé 
 0 0 * * * /usr/local/bin/ppetraki-backup.sh inc 
 0 0 * * ven/usr/local/bin/ppetraki-backup. sh complet 

Notez que je sauvegarde également ma crontab et ma liste de logiciels installés. Je vais éventuellement transférer ceci dans un autre script qui effectue également des opérations telles que

1) sauvegarder mes favoris de chrome et de firefox

2) sauvegarde du courrier dans un format non binaire

Le format cron actuel effectue une sauvegarde incrémentielle chaque nuit et une sauvegarde complète chaque vendredi.

Script de pilote

Ceci enveloppe l'invocation de duplicité et acquiert les variables d'environnement nécessaires. La duplicité elle-même peut être complexe avec tous les commutateurs de ligne de commande et même un fardeau supplémentaire si vous avez plusieurs cibles. J'ai des sauvegardes redondantes, d'abord sur un serveur local et sur un service distant fourni par rsync.net (excellent support client!). J'ai trouvé que horcrux était un wrapper de duplicité merveilleux, léger et adapté à mes besoins.

Le script de pilote, qui est externe à mon chemin de sauvegarde, contient également mon mot de passe GPG pour chiffrer mes sauvegardes. Finalement, je souhaite passer à un système piloté par carte à puce [illustré ici] ( http://blog.josefsson.org/2011/10/11/unattended-ssh-with-smartcard/ )

[/usr/local/bin/ppetraki-backup.sh]

 #!/bin/bash 
 
 export PATH = $ PATH:/usr/local/bin 
 action = 1 $ 
 
 export USER = XXX 
 export HOME =/home/$ USER 
 
 source $ HOME/.backenvrc 
 
 echo "vérification de l'environnement" 
 echo "gpg-agent: $ {GPG_AGENT_INFO}" 
 echo "clé gpg: $ {GPGKEY}" 
 echo "ssh-agent-pid: $ {SSH_AGENT_PID}" 
 echo "ssh-auth-sock: $ {SSH_AUTH_SOCK}" 
 
 if [-z $ action]; alors 
 écho "nécessite une action!" 
 sortie 1 
 fi 
 
 export PASSPHRASE = 
 
 [ -z $ PASSPHRASE] && exit 1 
 
 echo "begin" 
 
 pour la configuration dans local_backup remote_backup 
 faire 
 horcrux clean $ config 
 horcrux $ action $ config 
 terminé 

Utiliser horcruxe pour lutter contre la duplicité

Horcrux a la notion de profils qui simplifie grandement la gestion de la CLI pour la duplicité. Voici un exemple de profil.

 cat /home/ppetraki/.horcrux/local_backup-config
destination_path="rsync://192.168.1.XXX/backups/personal"
 cat ~/.horcrux/local_backup-exclude 
 - /home/ppetraki/Sandbox
- /home/ppetraki/Bugs
-/home/ppetraki/Téléchargements 
 - /home/ppetraki/Videos
- /home/ppetraki/.xsession-errors
- /home/ppetraki/.thumbnails
-/home/ppetraki /.local
- /home/ppetraki/.gvfs
- /home/ppetraki/.systemtap
- /home/ppetraki/.Adobe/Flash_Player/AssetCache
 - /home/ppetraki/.Thunderbird
- /home/ppetraki/.mozilla
- /home/ppetraki/.config/google-googletalkplugin
-/home/ppetraki/.config/google-chrome 
 - /home/ppetraki/.cache
- /home/ppetraki/**[cCHERRachache* ......]

Je trouvais problématique de ne sauvegarder que les sous-répertoires d'éléments tels que mozilla et google-chrome. J'écrirai plutôt un script supplémentaire pour sélectionner ces fichiers à sauvegarder.

Le fichier de configuration principal d'horcrux

 cat ~/.horcrux/horcrux.conf 
 source = "/ home/ppetraki /" # Assurer la fin de la barre oblique 
 encrypt_key = XXXXXX # ID de clé publique permettant de chiffrer les sauvegardes avec 
 sign_key = '-' # ID clé pour signer les sauvegardes avec (laisser comme '-' pour ne pas signer) 
 
 use_agent = false # Utilisez gpg-agent? 
 remove_n = 3 # Nombre de groupes de fichiers complets à supprimer 
 Verbosity = 5 # Journalise toutes les modifications de fichiers (voir la page de manuel relative à la duplicité) 
 Vol_size = 25 # Divise la sauvegarde en volumes de 25 Mo 
 Full_if_old = 30D # Permet à une opération 'complète' d'effectuer une sauvegarde complète de 
 # Si elle a plus de 360 ​​jours 
 Backup_basename = 'backup' # Nom du répertoire pour les sauvegardes locales (c'est-à-dire, la destination 
 #/Volumes/my_drive/backup/ou /media/my_drive/backup/)
dup_params='--use-agent '# Paramètres à transmettre à Duplicity 

C'est génial car cela réduit un appel de sauvegarde à ceci:

 $ horcrux inc local_backup 

Surveillance

J'ai défini MAILTO dans ma crontab et également installé mutt et le suffixe reconfiguré pour la distribution du courrier local. Chaque nuit, je reçois un rapport d'avancement sur le déroulement des sauvegardes.

Conclusion

J'ai passé pas mal de temps à déterminer comment automatiser cela et à fournir un cryptage renforcé. J'espère que vous trouvez ça utile.

6
ppetraki

Vous pouvez utiliser duplicity-automatate ( http://duplicity-auto.sf.net/ ).

Il supporte la syntaxe Nice XML et a quelques gestionnaires pour créer des dumps db MySQL/PostgreSQL.

Il suffit de définir deux fichiers comme:

<?xml version="1.0"?>
<duplicity-automate>
 <backups>
   <backup type="dir">
     <passphrase>abcdef</passphrase>
     <remote-name>home</remote-name>
     <local-path>/home</local-path>
     <expiry-period>1Y</expiry-period>
   </backup>

   <backup type="dir">
     <passphrase>qwerty</passphrase>
     <remote-name>config</remote-name>
     <local-path>/etc</local-path>
     <expiry-period>1Y</expiry-period>
   </backup>
 </backups>
</duplicity-automate>

et

<?xml version="1.0"?>
<duplicity-automate>
 <servers>
   <server>
     <protocol>ftp</protocol>
     <username>john</username>
     <hostname>example.com</hostname>
     <password>1234</password>
     <path>mydirectory/backups</path>
   </server>
 </servers>
</duplicity-automate>

et c'est tout!

0
mspanc