Grenode effectue des sauvegardes journalières et chiffrées de ses machines avec les outils backupninja et duplicity. Nous utilisons un espace de sauvegarde fourni par la machine gaffe.

Ce qui est sauvegardé

  • sur toutes les machines

    • [fs] /etc
    • [fs] /root
    • [fs] /var/backups
    • [fs] /var/spool/cron/crontabs
    • [fs] /home
    • [fs] /usr/local/bin
    • [fs] /usr/local/sbin
    • [fs] /var/lib/dpkg/status
    • [fs] /var/lib/dpkg/status-old
  • palanquee

  • outils

    • [mysql] sympa
    • [fs] /var/lib/sympa
  • soupirail

    • [fs] /var/lib/fs2ram

duplicity

Sur chaque machine à sauvegarder est créée une clé GPG (4096 RSA) avec un mot de passe aléatoire (pwgen). C'est la clé principale utilisé pour le chiffrement et la signature des sauvegardes. En plus de cette clé les backups sont chiffrés avec la clé GPG de chacun des administrateurs.

Ceci permet donc de récupérer les backups même si la clé gpg principale est perdue. De plus les clés GPG publiques de chacune des machines permettent de vérifier l'authenticité des backups.

La connexion à la machine de backup se fait par ssh. Chacune des machines dispose d'une clé SSH dans le compte root prévu pour cela

Bug duplicity avec stretch

Avec le passage à stretch, la sauvegarde échoue avec cette erreur :

Error: BackendException: ssh connection to <USER>@backup.grenode.net:22 failed: ('Bad authentication type', [u'publickey']) (allowed_types=[u'publickey'])

Le bug est connu : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870004 ; la solution adoptée est de patcher le script /usr/share/backupninja/dup comme des gros sales, en copiant ces quelques lignes dans /root/patch.backupninja :

--- backupninja.dup.orig        2018-01-25 10:20:27.753879804 +0100
+++ backupninja.dup.new 2018-01-25 10:21:42.823091892 +0100
@@ -116,7 +116,7 @@

 ### ssh/scp/sftp options (duplicity < 0.4.3 is unsupported)
 ## duplicity >= 0.6.17 : paramiko backend
-if [ "$duplicity_major" -ge 0 -a "$duplicity_minor" -ge 6 -a "$duplicity_sub" -ge 17 ]; then
+if [ "$duplicity_major" -gt 0 ] || [ "$duplicity_major" -eq 0 -a "$duplicity_minor" -gt 6 ] || [ "$duplicity_major" -eq 0 -a "$duplicity_minor" -eq 6 -a "$duplicity_su b" -ge 17 ]
    if [ -n "$sshoptions" ]; then
       echo "$sshoptions" | grep -Eqs '^-o<span class="createlink"><a href="/ikiwiki.cgi?do=create&amp;from=Documentation_technique%2FDivers%2FSauvegardes&amp;page=%3Aspace%3A" rel="nofollow">?</a>:space:</span>*IdentityFile=[^ ]+$' \
          || warning 'duplicity >= 0.6.17 only supports the IdentityFile SSH option'

puis de lancer :

patch /usr/share/backupninja/dup /root/patch.backupninja

S'il y a des mises à jour de backupninja ou duplicity, il faudra vérifier que le bug est corrigé, et repasser le patch si ce n'est pas le cas…

Clés GPG des machines

Procédures

Comment rajouter une machine

TODO

Comment déchiffrer les backups

TODO