Chiffrer un Raspberry Pi avec LUKS

Couverture Chiffrer un Raspberry Pi avec LUKS

Les cartes ARM type Raspberry Pi peuvent avoir un certain nombre d’avantages, compacité, faible coût et faible consommation énergétique (3,9 watts au repos pour un Raspberry pi 5). Inconvénient majeur pour héberger des données sensibles notamment dans le domaine de la santé, les images par défaut à flasher que ça soit sur carte SD ou SSD ne sont pas chiffrées. En cas de vol de la machine, les données sont facilement accessibles. Il existe des tutos pour chiffrer l’image à flasher. Pour les versions plus récentes de l’OS, j’avais suivi ce tuto. Très pratique pour comprendre comment ça fonctionne, ce n’est pas l’idéal pour automatiser le processus. J’ai finalement trouvé le projet SDM qui permet de scripter le déploiement.

Installation de sdm

  • Téléchargez d’abord l’installer qui va télécharger les fichiers dans /usr/local/sdm et créer un lien symbolique dans /usr/local/bin pour appeler la commande aisément.
curl -L https://raw.githubusercontent.com/gitbls/sdm/master/EZsdmInstaller | bash
  • Rendez-vous sur le site de téléchargement de Raspberry Pi OS et téléchargez l’image qui correspond à votre machine. Pour l’exemple, je vais prendre la dernière version de raspios lite ARM64. Vous pouvez décompresser le fichier obtenu avec votre gestionnaire d’archive ou via la commande : xz -d 2024-11-19-raspios-bookworm-arm64-lite.img.xz.

Personnalisation de l’image avec sdm

Exemple d’une commande pour personnaliser l’image :

sudo sdm --customize --plugin user:"adduser=user|password=prompt"--plugin L10n:host --plugin disables:piwiz --plugin apps:apps=@apps-base" --plugin copyfile:"from=cryptroot-authorized_key|to=/home/user/.ssh/authorized_key" --plugin cryptroot:"authkeys=cryptroot-authorized_key|ssh" --plugin network:"ifname=wlan0|ctype=wifi|wifi-ssid=XXXXXXXXXXXXXX|wifi-password=XXXXXXXXXXXXX|wificountry=FR" --plugin ufw --expand-root --regen-ssh-host-keys --restart 2024-11-19-raspios-bookworm-arm64-lite.img"

La commande en détails :

  • crée un utilisateur et demande la création du mot de passe.
  • Copie vos paramètres de localisation (Clavier, Locale, Fuseau horaire et Pays Wifi) à partir du système sur lequel il s’exécute (cela fonctionne sous Debian ou une dérivée).
  • Installe les paquets à partir du fichier apps-base.
  • Copie le fichier cryptroot-authorized_key vers la destination.
  • Chiffrera la racine avec activation de SSH dans l’initramfs avec accès par la clef cryptroot-authorized_key.
  • Configure le Wifi.
  • Installe le pare-feu.
  • Configure le système dans l’image pour avoir SSH activé.
  • Élargit la racine du fichier IMG.
  • Régénère les clés SSH.
  • Redémarre le système.

La documentation précise les différents paramètres et permet d’aller plus loin (par exemple configurer un fichier de règle pour le pare-feu).
Les fichiers appelés dans la commande sont présents au même niveau que le script.

Exemple du fichier apps-base :

fail2ban
kexec-tools
unattended-upgrades
zram-tools

Le principe est le même pour le fichier cryptroot-authorized_key, les clefs publics sont mises à la suite.

Écrire l’image sur la carte SD

Une fois l’image générée, flashez là sur la carte SD ou le SSD, exemple pour la carte SD, adaptez bien la commande à votre situation à vous pour ne pas écraser un de vos disques dur :

sudo sdm --burn /dev/sda --hostname pi --expand-root 2024-11-19-raspios-bookworm-arm64-lite.img

Chiffrer la carte SD

Insérez la carte SD et une clef USB dans votre Raspberry Pi et lancez-le. Le système va redémarrer deux fois tout seul. Au 3e démarrage, vous allez finir par accéder à l’initramfs. Tapez : sdmcryptfs /dev/mmcblk0 /dev/sda. Le script va importer le contenu de la carte SD sur la clé USB. Comme pour l’utilisation de LUKS habituel, répondez YES en majuscule quand on vous demande la confirmation de chiffrer la partition, puis tapez deux fois le mot de passe qui déverrouillera la carte SD Une fois la partition crée, tapez une 3e fois votre mot de passe pour ouvrir la partition et réimporter les fichiers de la SD. Il vous est proposé d’effacer la clef USB, répondez par oui ou par non en fonction de vos besoins. Il va redémarrer encore deux fois. Connectez-vous en SSH sur le compte root et tapez le mot de passe LUKS. Vous pouvez ensuite vous connecter à votre utilisateur courant.

Utiliser une clé USB pour déchiffrer la SD

Si vous souhaitez déverrouiller la partition LUKS sans taper votre mot de passe, vous pouvez utiliser un script qui va copier une clé sur une clé USB.

sudo /usr/local/sdm/sdm-make-luks-usb-key /dev/sda --init
sudo /usr/local/sdm/sdm-add-luks-key /root/b6eb6089-a6f0-4aa2-a388-448225651432.lek
reboot

Le script initramfs sdmluksunlock scanne continuellement les clés USB disponibles pour trouver le disque requis. Vous pouvez insérer la clé à tout moment ; il faudra quelques secondes pour que le disque soit reconnu et scanné, puis plusieurs secondes supplémentaires pour déverrouiller la racine du fichier IMG et poursuivre l’initialisation du système.
En plus d’écrire le disque USB, sdm-make-luks-usb-key place également une copie de la nouvelle clé d’enregistrement dans /root/big-long-uid.lek. Sauvegardez la clé d’enregistrement en cas de panne de votre clé USB par exemple. Une fois fait, vous pouvez la supprimer sudo rm -f /root/big-long-uid.lek.

Vous avez maintenant un Raspberry Pi chiffré au repos, une ligne de défense parmi d’autres pour protéger vos données.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Retour en haut