Commit aa385689 authored by Hamza Dely's avatar Hamza Dely

[README] Ajout de la partie 'Chiffrement de la carte'

parent c1c29453
......@@ -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@<nom de la ticketeuse>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment