Mettre en place une sauvegarde froide

Pour une fois, je vais commencer par la fin. Concernant les sauvegardes, il en existe de nombreux type :

  • des sauvegardes brutes,
  • des sauvegardes compressées,
  • des sauvegardes différentielles ou incrémentielles,
  • des sauvegardes sur site ou hors site,
  • et enfin des sauvegardes froides,

Nous allons voir aujourd’hui une sauvegarde froide. Mais commençons par définir ce dont il s’agit. Une sauvegarde froide est une sauvegarde déconnectée du réseau, et inaccessible à l’exception des périodes où elle est réalisée. Mais pourquoi mettre en œuvre une sauvegarde froide ? C’est en quelque sorte la cerise sur le gâteau, ce qu’il vous reste quand il ne vous reste plus rien. Imaginez qu’un attaquant ait pris le contrôle de votre serveur et ait rendu toutes les données illisibles. C’est le cas des rançongiciels … Dans ce cas, il n’aura pas pu atteindre votre sauvegarde froide, qui sera isolée du réseau et lui sera donc inaccessible. Et vous pourrez restaurer vos données telles qu’elles étaient au moment de la dernière copie.

Faire une sauvegarde froide, rien de plus facile, un petit coup de rsync et c’est plié. Sauf que s’il s’agit d’un support qui a une probabilité non-négligeable d’être perdu ou volé (disque amovible, clé USB, …), on ne va peut-être pas laisser traîner ses données en clair. Donc tout l’intérêt de ce tutoriel, c’est de partager la méthode qui permet de crypter les données.

Je précise que ce tutoriel est d’un niveau avancé.

Donc voici la démarche que j’ai mise en œuvre :
J’ai installé le paquet gocryptfs, qui va permettre d’encrypter le support de sauvegarde. J’ai monté ce support sur /mnt puis j’ai initialisé le cryptage :

sudo gocryptfs -init -xchacha /mnt

J’ai utilisé un mot de passe de 32 caractères qui j’ai mis bien au chaud dans Vaultwarden et que j’ai copié dans le répertoire où je garde tous mes scripts de backup : /home/k-sper.fr/sauvegarde/.pass. Je l’ai laissé en clair car de toute façon si quelqu’un arrive à y avoir accès, il a aussi accès à tout mon système.
Lorsque l’initialisation du cryptage a été réalisée, elle a créé deux fichiers sur le support de sauvegarde : gocryptfs.diriv et gocryptfs.conf. Le premier ne m’intéresse pas outre mesure, mais le deuxième comporte la configuration du cryptage et notamment une version cryptée de la clé de cryptage. Donc j’ai déplacé ce fichier du support amovible vers le répertoire des sauvegardes : 

sudo mv /mnt/gocryptfs.conf /home/k-sper.fr/sauvegarde

J’en ai aussi fait une copie que j’ai mis avec le mot de passe sur Vaultwarden, de manière à pouvoir y avoir accès en cas de sinistre.

Ceci étant fait, j’étais fin prêt à la première sauvegarde. J’ai créé le script suivant :

#!/bin/bash
mount -U <UUID> /mnt
mkdir /srv/copie-ext
gocryptfs -config /home/k-sper.fr/sauvegarde/gocryptfs.conf -passfile /home/k-sper.fr/sauvegarde/.pass /mnt /srv/copie-ext
rsync -artucv --delete-during --progress /srv/hdd/nas /srv/copie-ext
fusermount -u /srv/copie-ext
rm -r /srv/copie-ext
umount /mnt

Quelques explications :
La première ligne est le « shebang », qui indique que mon script est écrit en bash.
La seconde monte mon support sur /mnt. J’ai récupéré l’UUID du volume par un blkid.
La troisième crée un répertoire (/media/copie-ext) où je vais déposer les données pour qu’elles soient cryptées. En effet, l’outil gocryptfs permet d’avoir sur /mnt la vision des données cryptées et sur /media/copie-ext la vision en clair des données.
C’est ce que je vais faire avec la quatrième ligne :

  • -config /home/k-sper.fr/sauvegarde/gocryptfs.conf : j’indique à gocryptfs où est le fichier de configuration du support de sauvegarde, celui qui avait été créé sur le support et que j’avais déplacé,
  • -passfile /home/k-sper.fr/sauvegarde/.pass : j’indique le chemin d’accès au mot de passe,
  • /mnt /srv/copie-ext : j’indique que c’est le support monté en /mnt qui doit recevoir du contenu crypté sur /srv/copie-ext.

La ligne suivante est un rsync « classique », qui va déposer une copie incrémentale des données sources (/srv/hdd/nas) sur mon volume crypté (/srv/copie-ext).
Lorsque cette copie est terminée, je démonte la version cryptée de mon support de sauvegarde avec la commande fusermount. A ce stade, le répertoire /srv/copie-ext est vide et je peux le supprimer et je démonte le disque de manière traditionnelle.
J’ai désormais l’ensemble de mes données dans la poche, sous une forme sécurisée par un mot de passe de 32 caractères que je ne connais pas moi-même.

Pour retrouver un accès à mes données, je vais procéder sur n’importe quel ordinateur Linux disposant du paquet gocryptfs aux manipulations suivantes :

Je vais copier le fichier gocryptfs.conf sur /home/eric/sauvegarde (vous pouvez le remplacer par le répertoire de votre choix) :

mount -U <UUID> /mnt
mkdir /srv/copie-ext
gocryptfs -config /home/k-sper.fr/sauvegarde/gocryptfs.conf /mnt /srv/copie-ext

A l’invite de commande, je vais coller le mot de passe. A partir de ce moment-là, j’aurai accès à l’ensemble de mes données sur /srv/copie-ext.
Dans l’éventualité où j’aurais perdu l’accès à mon fichier gocryptfs.conf, je pourrais remplacer la dernière commande par :

gocryptfs -masterkey=<clé> /mnt /srv/copie-ext

où <clé> sera la clé de type 12345678-90abcdef-12345678-90abcdef-12345678-90abcdef-12345678-90abcdef que nous avions mis au réfrigérateur plus haut. De la même manière, je pourrai naviguer dans mes données sur /srv/copie-ext.


Si vous avez apprécié cet article, n’hésitez pas à laisser à son auteur un petit commentaire : il l’encouragera à le maintenir et à le développer.


Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *