diff --git a/README.md b/README.md index 556dac4..e88b933 100644 --- a/README.md +++ b/README.md @@ -55,3 +55,113 @@ sur civet: sudo rabbitmqctl set_permissions oie "(amq\.default|CransTicket)" "CransTicket" "amq\.default" sudo rabbitmqctl set_permissions oie "\(amq\.default|CransTicket\)" "CransTicket" "amq\.default" sudo rabbitmqctl set_permissions oie "(amq\.default|CransTicket)" "CransTicket" "(amq\.default|CransTicket)" + +# Chiffrer la carte de la ticketeuse + +Pour protéger les données stockées sur la carte des ticketeuses, on chiffre sa partition racine. +Lorsque la raspberry boote, il est nécessaire de rentrer une passphrase pour déchiffrer le disque afin +que la machine puisse finir de charger le système d'exploitation. + +Cette passphrase peut-être rentrée au clavier sur la raspberry ou en se connectant avec une clé SSH. + +Ce qui suit est un résumé de la procédure décrite sur [cette page](paxswill.com/blog/2013/11/04/encrypted-raspberry-pi/) + +## Paquets nécessaires + * `busybox` + * `cryptsetup` + * `dropbear` (Pour le déverouillage à distance uniquement) + +Il faut donc commencer par les installer + + # apt-get install busybox cryptsetup + +## Génération d'une première initramfs + +On commence par générer une première initramfs + + # mkinitramfs -o /boot/initramfs.gz + +Puis on demande à la raspberry de booter dessus au prochain démarrage en ajoutant à la fin du fichier `/boot/config.txt` +la ligne suivante : + + initramfs initramfs.gz followkernel + +## Chiffrement du slash de la ticketeuse + +À partir d'ici, il faut une autre machine sous Linux capable de monter la carte SD de la raspberry +Il faut repérer lorsque la carte est insérée à quel périphérique elle correspond, par exemple `/dev/sdb` (cela peut très bien être `/dev/mmcblk0p` ou autre chose). On peut utiliser le dmesg pour ça. + +On commence par sauvegarder sur la deuxième machine les données de la ticketeuse de façon à pouvoir chiffrer le / (ce qui va formatter la partition et donc effacer ses données) avant de les y remettre. + + # dd if=/dev/sdb2 of=/tmp/raspbian-plain.img bs=4M + # e2fsck -f /tmp/raspbian-plain.img + # resize2fs -M /tmp/raspbian-plain.img + +Toujours sur l'ordinateur (*pas sur la rPi*), il faut installer `cryptsetup` + + # apt-get install cryptsetup + +On chiffre ensuite la partition avant de la déverrouiller + + # cryptsetup -v -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdb2 + # cryptsetup -v luksOpen /dev/sdb2 sdcard + +Puis on restaure les données + + # dd if=/tmp/raspbian-plain.img of=/dev/mapper/sdcard bs=4M + # e2fsck /dev/mapper/sdcard + # resize2fs /dev/mapper/sdcard + +Il reste à expliquer à la raspberry comment booter sur ces nouvelles partitions + + # mkdir /tmp/pi_root /tmp/pi_boot + # mount /dev/sdb1 /tmp/pi_boot + # mount /dev/mapper/sdcard /tmp/pi_root + +Le fichier `/tmp/pi_boot/cmdline.txt` doit être modifié : il faut remplacer `root=/dev/mmcblk0p2` par `root=/dev/mapper/sdcard cryptdevice=/dev/mmcblk0p2:sdcard`. +Il faut ensuite adapter le `/tmp/pi_root/etc/fstab` pour que la rPi boote correctement : `/dev/mmcblk0p2` doit être changé en `/dev/mapper/sdcard` +Enfin, un nouveau fichier `/tmp/pi_root/etc/crypttab` doit être créé. Il doit contenir : + + sdcard /dev/mmcblk0p2 none luks + +Tous les systèmesde fichiers peuvent alors être démontés et la carte replacée dans la rPi + + # umount /tmp/pi_boot/ /tmp/pi_root/ + # cryptsetup luksClose sdcard + +## Démarrage + +Il faut alors connecter un écran et un clavier à la raspberry Pi, car **le premier boot va rater**, car la racine du système ne sera pas accessible avant que la partition ne soit déchiffrée. +Lorsque le système ouvre un shell de secours (lignes commençant par `(initramfs)`), les commandes suivantes permettent de déchiffrer la carte pour que la rPi puisse continuer la séquence de boot + + (initramfs) cryptsetup luksOpen /dev/mmcblk0p2 sdcard + (initramfs) exit + +Une fois le boot terminé, on régénère l'initramfs + + # mkinitramfs -o /boot/initramfs.gz + +La machine peut être redémarrée sans crainte, la passphrase sera gentillement demandée lors du boot + +## Déchiffrement à distance + +Pour déchiffer la partition contenant la racine du système à distance, on installe dropbear, un serveur SSH léger qui permettra de se connecter avant le montage de la racine avec un clé SSH. + + # apt-get install dropbear + +Le code de dropbear dans Raspbian contient une erreur qu'il faut corriger : À la ligne 296 du fichier `/usr/share/initramfs-tools/scripts/local-top/cryptroot`, il faut ajouter `/sbin/` avant `blkid`, puis régénérer l'initramfs + + # mkinitramfs -o /boot/initramfs.gz + +Copier la clé SSH générée par dropbear (`/etc/initramfs-tools/root/.ssh/id\_rsa`) sur un autre ordinateur, puis l'ajouter au fichier authorized_keys de l'initramfs `/etc/initramfs-tools/root/.ssh/authorized\_keys`. +Ajouter juste avant le `ssh-rsa` l'instruction suivante : + + command="/scripts/local-top/cryptroot && kill -9 `ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3`" + +Il reste à régénérer l'initramfs une dernière fois + + # mkinitramfs -o /boot/initramfs.gz + +Il ne reste plus qu'à tester en redémarrant la rPi et en essayant de s'y connecter pour taper la passphrase + + ssh -i chemin/vers/la/clé root@