PAGE EN CHANTIER, EN COURS DE RÉDACTION
Cette page a pour but de détailler l’automatisation de la copie d’un répertoire, en l’occurrence le dossier contenant les dépôts BorgBackup, vers un disque dur externe, dès le branchement de celui-ci.
Installation des prérequis
Le système nécessite l’installation du paquet cryptsetup (pour chiffrer un volume ou le déchiffrer et y accéder) :
sudo apt install cryptsetup
Chiffrement du disque dur externe
Le disque dur sur lequel seront copiées les dépôts Borg a vocation à être stocké hors site (chez un ami, un voisin, au travail, etc.), et est donc susceptible d’être dérobé. Son contenu doit donc être chiffré.
Cryptsetup permet bien évidemment de chiffrer/déchiffrer le volume avec un mot de passe, mais nous allons ici le faire (en plus), avec un fichier utilisé comme clé.
Sur mon disque dur externe, j’ai effectué la création d’un volume (partition nommée BACKUPCOPY) chiffré avec un mot de passe, depuis un autre ordinateur avec l’outil graphique “Disques” de GNOME. Je ne détaille pas la procédure ici.
On génère la clé de chiffrement et on la sécurise :
sudo dd bs=512 count=4 if=/dev/random of=/root/backupcopy.keyfile iflag=fullblock
sudo chmod 600 /root/backupcopy.keyfile
Il ne faudra pas oublier de sauvegarder cette clé quelque part, ou d’être certain de pouvoir (dé)chiffrer le volume avec un mot de passe.
On branche le disque dur externe, puis on détermine où il est accessible (ici sur sda1), et quel est l’UUID de son volume chiffré. :
$ lsblk -f
NAME FSTYPE UUID
sdb
└─sdb1 crypto_LUKS f928895d-9535-4ab5-bc9b-6ac9ff70acb0
On notera que la partition présente à l’intérieur du volume chiffré dispose d’un UUID qui lui est propre, mais que c’est bien celui du volume LUKS dont nous avons besoin.
On ajoute le fichier précédemment créé comme clé de déchiffrement au volume (le mot de passe sera demandé à cette étape) :
sudo cryptsetup luksAddKey /dev/sda1 /root/backupcopy.keyfile
Il est désormais possible de déchiffrer la partition et la monter :
sudo mkdir /mnt/BackupCopy
sudo cryptsetup luksOpen -d /root/backupcopy.keyfile /dev/disk/by-uuid/f928895d-9535-4ab5-bc9b-6ac9ff70acb0 backupcopy
sudo mount /dev/mapper/backupcopy /mnt/BackupCopy/
On crée le dossier dans lequel seront placés les copies des dépôts :
sudo mkdir /mnt/BackupCopy/BackupCopies
Script de montage du volume chiffré et de lancement de la copie
On place toutes ces étapes dans un script qu’on peut lancer manuellement après avoir branché le disque externe.
J’ajoute plusieurs éléments, dont l’envoi de SMS via l’API de Free Mobile, la vérification de l’existence des dossiers source et cible avant de lancer la synchronisation, et le démontage du volume à l’issue des opérations, pour pouvoir débrancher le disque si tout s’est bien passé.
Fichier /opt/decrypt-backup.sh :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|
Lancement automatique du script au branchement
Le script précédent doit être lancé dès que le disque dur est branché. On va donc créer un service systemd et une règle udev pour ce faire.
TODO
sudo nano /etc/crypttab
sudo nano /etc/fstab
sudo mkdir /mnt/BackupCopy
sudo mount /mnt/BackupCopy
sudo cryptsetup luksOpen —key-file /root/backupcopy.keyfile /dev/sda1 BACKUPCOPY
root@raspberrypi:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1,8T 0 disk
└─sda1 8:1 0 1,8T 0 part
└─BACKUPCOPY 254:0 0 1,8T 0 crypt /mnt/BackupCopy
sdb 8:16 0 1,8T 0 disk
└─sdb1 8:17 0 1,8T 0 part /mnt/BackupWD2T
mmcblk0 179:0 0 7,5G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 7,2G 0 part /
https://medium.com/@amritanshu16/how-to-mount-luks-encrypted-disk-in-raspbian-821b0a56c18e
Fichier /etc/systemd/system/backup-copy.service
[Unit]
Description=Copie des sauvegardes sur disque externe
[Service]
Type=oneshot
ExecStart=/opt/decrypt-backup.sh
Fichier /etc/udev/rules.d/81-decrypt-backup.rules
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="25a2", ATTR{partition}=="1", ENV{SYSTEMD_WANTS}="backup-copy.service", TAG+="systemd"
Sources et références :
- https://wiki.archlinux.org/index.php/Udev
- https://stackoverflow.com/questions/20084740/udev-run-program-on-usb-flash-drive-insert
- https://superuser.com/questions/246953/trigger-off-rsync-by-just-plugging-in-a-usb-drive
- https://bbs.archlinux.org/viewtopic.php?id=181856
- https://www.qwant.com/?client=brz-moz&q=linux+udev+rule+launch+backup