Cryptez vos sauvegardes grâce au Raspberry Pi

Avez-vous déjà imaginé perdre l’intégralité de vos données : photos, vidéos, musiques soigneusement classées, documents importants, et j’en passe ? Moi non. C’est pourquoi j’ai réfléchi à une stratégie de sauvegarde qui couvre les différents risques auxquels sont exposées mes données. Dans cet article, je vous explique comment j’ai mis en place cette stratégie en transformant mon Raspberry Pi en serveur de sauvegarde autonome et sécurisé. On va parler de cryptage des données et taper de la ligne de commande, je suis sûr que vous allez adorer.
Sauvegardez vos données !
Vous n’en avez peut-être pas conscience mais vos données sont exposées à de nombreux risques, voici quelques exemples : problème matériel (défaillance d’un disque, surtension), vol, sinistre (dégât des eaux, incendie), erreur humaine (suppression accidentelle de fichiers), virus. Je ne veux pas vous faire peur mais sans sauvegarde, si un de ces événements se produit, il y a de fortes chances pour que vos données soient totalement perdues. Dans le meilleur des cas, il faudra débourser plusieurs centaines d’euros pour n’en récupérer qu’une partie. Vous comprenez maintenant l’importance d’avoir une stratégie de sauvegarde ?
Si vous ne voulez pas vous embêter et que vous n’avez pas peur de confier vos précieuses données à des sociétés, américaines dans la plupart des cas, vous pouvez opter pour un service de sauvegarde dans le Cloud très simple à mettre en œuvre (crashplan est la référence dans le domaine). Sinon, vous pouvez continuer à lire cet article !
Ma stratégie de sauvegarde
Toutes mes données sont stockées sur un NAS Synology équipé de deux disques de 2 To configurés en RAID 0 (agrégation). J’ai choisi d’effectuer des sauvegardes de l’intégralité de mes données sur deux disques durs. Un disque dur est utilisé pour les sauvegardes quotidiennes pendant que l’autre disque dur est entreposé au bureau. Une fois par mois, j’inverse les deux disques. Celui qui est stocké au bureau fait donc office de sauvegarde mensuelle. De cette manière, j’ai toujours une sauvegarde à l’extérieur de mon domicile.
La sauvegarde quotidienne couvre le risque de défaillance d’un disque et la sauvegarde mensuelle couvre tous les autres. Cela signifie qu’en cas de défaillance d’un disque, j’accepte de perdre les données d’une journée au maximum et dans tous les autres cas, les données d’un mois maximum. C’est mon choix !
Transformez votre Raspberry Pi en serveur de sauvegarde
Vous devez vous demander ce que le Raspberry Pi vient faire là-dedans. En fait, j’ai identifié un dernier risque : le vol du disque qui est entreposé à l’extérieur de mon domicile et l’accès à mes données personnelles par une personne mal intentionnée. La seule solution que j’ai trouvée pour couvrir ce risque est de crypter mes disques de sauvegarde. Mon NAS ne gérant pas cette fonctionnalité en natif, je me suis dit que j’allais utiliser mon Raspberry Pi comme serveur de sauvegarde. Dans cette partie, je vous indique comment j’ai mis en place ce serveur afin que vous puissiez vous aussi avoir une copie sécurisée de vos données.
Je suppose que vous avez déjà installé et configuré Raspbian sur votre nano-ordinateur. Si ce n’est pas le cas, je vous invite à suivre l’excellent tutoriel de Raspbian France. Ouvrez la console (soit directement sur Raspbian, soit en SSH, c’est vous qui voyez), c’est ici que tout va se passer !
Pour partir sur de bonnes bases, nous allons mettre à jour les paquets déjà installés :
sudo apt-get update && sudo apt-get upgrade
Cryptage du disque
Pour crypter le disque dur, nous allons créer un volume crypté sur une des partitions du disque (s’il n’y en a pas, nous allons en créer une). Ensuite, nous allons installer un système de fichier sur ce volume crypté. Pour que vous compreniez un peu mieux l’architecture que l’on va mettre en place, je vous ai fait un petit schéma :
Installation de cryptsetup
Le programme qui va nous permettre de créer et d’ouvrir un volume crypté s’appelle cryptsetup. Pour l’installer, utilisez la commande suivante :
sudo apt-get install cryptsetup
Création d’une partition
Afin d’obtenir la liste des périphériques de stockage connectés, tapez la commande :
sudo lsblk
Le résultat devrait ressembler à ça :
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465,8G 0 disk └─sda1 8:1 0 465,8G 0 part mmcblk0 179:0 0 14,9G 0 disk ├─mmcblk0p1 179:1 0 63M 0 part /boot └─mmcblk0p2 179:2 0 14,8G 0 part /
Identifiez votre disque en vous fiant à sa taille. Dans cet exemple, j’ai connecté un disque de 500Go, il porte l’identifiant « sda ». Vous pouvez voir que sous la ligne du disque, il y a une ligne « sda1 » qui fait la même taille que le disque. Cela signifie que mon disque a déjà une partition qui occupe tout l’espace disponible. Si vous êtes dans ce cas, vous pouvez passer à l’étape suivante.
Si aucune ligne n’apparaît sous celle du disque, cela signifie que votre disque n’a pas encore de partition. Nous allons donc en créer une :
sudo parted /dev/sda
L’utilitaire de partitionnement se lance. Pour créer la table des partitions, entrez :
mklabel gpt
Vérifiez les informations du disque en tapant :
Voici le résultat de cette commande avec mon disque dur de 500Go :
Model: SAMSUNG HD503HI (scsi) Disk /dev/sda: 500GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flag
Repérez la capacité du disque (ici 500GB) puis entrez la commande suivante en remplaçant « 500GB » par la valeur relevée :
mkpart primary 0GB 500GB
Vous pouvez maintenant fermer l’utilitaire en tapant :
quit
Cryptage de la partition
Pour créer un volume crypté sur une partition de votre disque, entrez la commande suivante en remplaçant « sda1 » par l’identifiant de votre partition :
sudo cryptsetup luksFormat /dev/sda1
Un message d’avertissement s’affiche et vous demande d’écrire « YES » pour montrer que vous êtes un grand garçon et que vous savez ce que vous faites. Vous devrez ensuite saisir deux fois une phrase secrète de votre choix (il s’agit en fait du mot de passe que vous utiliserez pour décrypter le volume donc tachez de vous en rappeler).
Ouverture du volume crypté
Pour ouvrir le volume crypté, vous devez utiliser la commande :
sudo cryptsetup luksOpen /dev/sda1 EncryptedBackup
L’utilitaire vous demande de saisir votre phrase secrète et ouvre le volume crypté. Ce dernier est alors accessible dans le répertoire « /dev/mapper/EncryptedBackup ».
Création du système de fichier
Nous allons maintenant créer un système de fichier ext4 sur le volume crypté :
sudo mkfs.ext4 /dev/mapper/EncryptedBackup
Montage du système de fichier
Il est temps de créer le dossier dans lequel les fichiers du disque seront accessibles et de monter le système de fichier dans ce dossier :
sudo mkdir /mnt/Backup
sudo chmod -R 750 /mnt/Backup
sudo mount /dev/mapper/EncryptedBackup /mnt/Backup
Vérifications et fermeture du volume crypté
Vous pouvez vérifier que le système de fichier est correctement monté grâce à cette commande :
sudo df -hT
La liste de tous les systèmes de fichier montés est affichée :
Sys. de fichiers Type Taille Utilisé Dispo Uti% Monté sur /dev/root ext4 15G 3,4G 11G 25% / devtmpfs devtmpfs 459M 0 459M 0% /dev tmpfs tmpfs 463M 0 463M 0% /dev/shm tmpfs tmpfs 463M 6,3M 457M 2% /run tmpfs tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs tmpfs 463M 0 463M 0% /sys/fs/cgroup /dev/mmcblk0p1 vfat 63M 21M 43M 33% /boot tmpfs tmpfs 93M 0 93M 0% /run/user/1000 /dev/mapper/EncryptedBackup ext4 459G 70M 435G 1% /mnt/Backup
Sur la dernière ligne, vous pouvez voir que notre volume crypté est bien monté.
Vous pouvez aussi utiliser cette commande :
sudo cryptsetup -v status EncryptedBackup
Toutes les informations sur le volume crypté sont alors affichées :
/dev/mapper/EncryptedBackup is active and is in use. type: LUKS1 cipher: aes-xts-plain64 keysize: 256 bits device: /dev/sda1 offset: 4096 sectors size: 976764928 sectors mode: read/write Opération réussie.
Vous pouvez voir le type de volume, sa taille ainsi que l’algorithme de cryptage utilisé.
Démontez ensuite le système de fichier et fermez le volume crypté :
sudo umount /mnt/Backup sudo cryptsetup luksClose EncryptedBackup
Création d’une clé de décryptage
La clé de décryptage permettra d’ouvrir le volume crypté sans avoir à taper la phrase secrète. Pour la créer, entrez ces commandes :
sudo dd if=/dev/urandom of=/root/BackupKeyFile bs=1024 count=4 sudo chmod 0400 /root/BackupKeyFile sudo cryptsetup luksAddKey /dev/sda1 /root/BackupKeyFile
Décryptage avec la clé
Vous pouvez effectuer un test de décryptage du volume avec la clé fraîchement créée :
sudo cryptsetup luksOpen -–key-file /root/BackupKeyFile /dev/sda1 EncryptedBackup
Décryptage automatique
À présent, nous allons faire en sorte que le volume crypté soit automatiquement ouvert au démarrage du Raspberry Pi. Pour cela, nous allons avoir besoin de l’identifiant unique de la partition. Pour l’obtenir, il suffit d’utiliser la commande :
ls -l /dev/disk/by-uuid
La liste des identifiants uniques est affichée :
total 0 lrwxrwxrwx 1 root root 15 juil. 16 09:05 2D2D-CD16 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 15 juil. 16 09:05 2f840c69-cecb-4b10-87e4-01b9d28c231c -> ../../mmcblk0p2 lrwxrwxrwx 1 root root 10 juil. 22 07:04 61b671e5-d3ea-43dc-8067-65096f1061bb -> ../../sda1 lrwxrwxrwx 1 root root 10 juil. 22 07:04 6e775313-19db-4a67-a1a0-dba4caf005fb -> ../../dm-0
Identifiez celui qui correspond à votre partition (sda1 dans mon cas).
Il faut ensuite indiquer à cryptsetup que si la partition avec l’identifiant unique que vous venez de relever est présente au démarrage du système, il faut la décrypter avec la clé créée à l’étape précédente. Pour cela, vous devez éditer le fichier « /etc/crypttab » :
sudo nano /etc/crypttab
Ajoutez la ligne suivante en remplaçant « UUID » par l’identifiant unique de votre partition :
EncryptedBackup /dev/disk/by-uuid/UUID /root/BackupKeyFile luks
Pour enregistrer les modifications, vous devez faire CTRL + X, appuyer sur la touche « o » puis valider la destination qui est proposée en appuyant sur entrée.
Montage automatique du système de fichiers
Notre volume crypté sera maintenant ouvert au démarrage du système, il ne reste donc qu’à monter automatiquement le système de fichier dans le répertoire « /mnt/Backup ». Pour cela, il faut modifier le fichier « /ect/fstab » en tapant :
sudo nano /etc/fstab
Ajoutez la ligne suivante puis enregistrez vos modifications :
/dev/mapper/EncryptedBackup /mnt/Backup ext4 defaults,nofail 0 2
Délai de démarrage du système
J’ai remarqué que quelques fois, le système finit de démarrer avant que le disque dur USB ne soit initialisé. Dans ce cas, le volume n’est pas monté automatiquement car le disque n’est pas détecté au moment où cryptsetup se lance. Pour pallier à ce problème, nous allons retarder le lancement du système de 15 secondes. Ouvrez le fichier « /boot/cmdline.txt » grâce à la commande :
sudo nano /boot/cmdline.txt
Ce fichier ne contient qu’une seule ligne de texte. Ajoutez un espace puis entrez ce texte avant d’enregistrer vos modifications :
rootdelay=15
Mise en veille du disque
Selon le boîtier du disque dur que vous utilisez, il se peut que votre disque ne se mette jamais en veille. Pour forcer la mise en veille du disque et éviter son usure prématurée, vous pouvez installer l’utilitaire hdparm grâce à la commande suivante :
sudo apt-get install hdparm
Il faut ensuite configurer le délai de mise en veille en éditant le fichier « /etc/hdparm.conf » :
sudo nano /etc/hdparm.conf
Ajoutez ces lignes en bas du fichier en remplaçant 120 par le délai de mise en veille souhaité (c’est en secondes) puis enregistrez :
/dev/sda { write_cache = on spindown_time = 120 }
Redémarrage du système
Redémarrez votre Raspberry grâce à la commande :
sudo reboot
Une fois que le système est démarré, vérifiez que le disque a bien été automatiquement décrypté avec la commande vue plus haut :
sudo df -hT
Sauvegardez sur le disque
Le temps est venu de créer un utilisateur spécifique pour effectuer vos sauvegardes. Sur la version lite de Raspbian, vous pouvez utiliser « backup » comme login. Ceux qui utilisent la version classique doivent utiliser un autre login car « backup » existe déjà sur le système et je ne sais pas à quoi il sert. Dans ce cas, remplacez « backup » par le login choisi dans toutes les commandes que vous taperez.
Créez l’utilisateur :
sudo useradd backup -m -G users
Spécifiez son mot de passe :
sudo passwd backup
La dernière étape consiste à spécifier que le propriétaire du dossier où est monté notre système de fichier est l’utilisateur que nous venons de créer :
sudo chown backup:users /mnt/Backup
Sauvegardez vos données depuis un NAS
La plupart des NAS sont capables d’effectuer des sauvegardes distantes, soit sur un autre NAS, soit sur un serveur compatible rsync. C’est cette deuxième option qui nous intéresse car il est possible d’installer rsync sur le Raspberry Pi ! Si vous avez choisi la version normale de Raspbian, rsync est déjà installé, sinon, vous devez l’installer en tapant :
sudo apt-get install rsync
Vous pouvez maintenant utiliser votre Raspberry Pi comme destination de sauvegarde sur votre NAS. Par exemple, sur DSM (le système d’exploitation des NAS Synology), il faut :
- Se connecter à l’interface d’administration
- Ouvrir Hyper Backup
- Cliquer sur « Ajouter »
- Sélectionner « Copie de données distantes »
- Renseigner les informations suivantes :
- Type de serveur : Serveur compatible rsync
- Nom ou adresse IP du serveur : Adresse IP du Raspberry
- Chiffrement du transfert : Activé
- Port : 22
- Nom d’utilisateur : backup
- Mot de passe : Mot de passe spécifié pour l’utilisateur backup
- Module de sauvegarde : /mnt/Backup
- Choisir les paramètres de sauvegarde (dossiers à sauvegarder, fréquence, …)
That’s all !
Sauvegardez vos données depuis n’importe quel PC
Vous pouvez aussi sauvegarder vos données depuis n’importe quel ordinateur connecté au même réseau que le Raspberry Pi. Pour cela, nous allons créer un partage réseau qui sera accessible depuis tous vos PC sous Windows.
L’utilitaire qui permet de créer des partages réseau Windows sur un système Unix s’appelle samba. Pour l’installer, tapez :
sudo apt-get install samba samba-common-bin
Créez l’utilisateur samba en tapant :
sudo smbpasswd -a backup
L’utilitaire vous demande ensuite d’entrer un mot de passe et de le confirmer, entrez celui que vous avez fourni lors de la création de l’utilisateur.
Ouvrez le fichier de configuration de samba en édition en tapant les commandes suivantes (la première commande permet de sauvegarder le fichier de configuration d’origine) :
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.old sudo nano /etc/samba/smb.conf
Entrez la configuration suivante :
[global] workgroup = WORKGROUP server string = %h server security = user [Backup] comment = Disque dur de sauvegarde path = "/mnt/Backup" browseable = yes read only = no writable = yes valid users = backup create mask = 0750 directory mask = 0750
Enregistrez le fichier puis redémarrez le service samba pour que la nouvelle configuration soit prise en compte :
sudo /etc/init.d/samba restart
Vous pouvez maintenant accéder au contenu du disque de sauvegarde en tapant « \\IP_RASPBERRY\Backup » dans la barre d’adresse de l’explorateur de fichier de Windows (en remplaçant « IP_RASPBERRY » par l’adresse IP de votre Raspberry PI). Quand les informations de connexion vous sont demandées, renseignez le login et le mot de passe de l’utilisateur que vous avez créé.
Pour sauvegarder vos données sur ce répertoire partagé, vous pouvez utiliser le logiciel SyncBack. C’est un freeware qui permet de sauvegarder, restaurer et synchroniser des fichiers. Il permet même de planifier vos tâches de sauvegarde automatiques !
J’espère que cet article vous a plu et qu’à partir de maintenant vous aurez le réflexe de sauvegarder régulièrement vos données. Allez, je retourne profiter de mes vacances et réfléchir à de nouveaux projets pour la rentrée. À bientôt !
Fred - Il y a 4 années -
Merci de ces infos. Je fais de même également pour protéger mes données. J’aimerais faire encore mieux, c’est à dire encrypter les données mais également le système. Le souci que je rencontre c’est que j’accède au raspberry via ssh or tant que je n’ai pas ouvert le volume crypté, je n’ai pas accès au ssh et vice-versa…
Bref, il faudrait que je puis démarrer après le boot un mini-ssh me permettant l’ouverture du volume crypté et donc le démarrage du système… C’est possible cela ?
Ludovic - Il y a 4 années
Bonjour Fred,
Si je comprends bien, tu as crypté ton système et pour le décrypter tu dois saisir un mot de passe qui ne peut être saisi qu’avec le clavier (le démon SSH n’étant pas encore lancé) ? Apparemment, tu n’es pas le seul à avoir cette problématique : http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/ 😉
Tiens-moi au courant !
Fred - Il y a 4 années -
Merci de ta réponse.
Voici ce que j’ai trouvé pour l’instant :
https://chezmanu.eu.org/RPI-Chiffrement.htm#som4
mais je bloque dès le début :
mkinitramfs -o /boot/initramfs.gz $(uname -r)
qui me renvoie l’erreur :
cryptsetup: WARNING: failed to detect canonical device of PARTUUID=f6f7bcc2-02
cryptsetup: WARNING: could not determine root device from /etc/fstab
dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won’t work!
Sinon, je viens de voir :
https://github.com/NicoHood/NicoHood.github.io/wiki/Raspberry-Pi-Encrypt-Root-Partition-Tutorial
mais pas testé et puis avant de me lancer et de tout planter, j’aurais bien aimé plus d’expériences… 😉
Fred
Ludovic - Il y a 4 années
Bonjour Fred,
Effectivement, si tu as une installation qui tourne, il ne vaut mieux pas tenter des choses qui pourraient tout planter. Avant de faire quoi que ce soit, je te conseille de faire une copie de ta micro SD avec le logiciel Win32DiskImager qui permet d’écrire une image sur une carte micro SD mais aussi de créer une image d’une carte micro SD (avec l’option « Lire »). En cas de pépin, tu pourras toujours récrire l’image que tu as sauvegardé sur la carte SD 😉
Bonne recherche !
Ludovic