Liens : |
Sommaire : 1-Pourquoi faire ? 2-La différence avec une Debian sur x86 3-Pré-requis 4-Installation et chiffrement 5-Bonus 1 : transférer sur une mémoire plus importante 6-Bonus 2 : Gérer ses passphrases 1 - Pourquoi faire ?
Le Raspberry Pi est un ordinateur. Rien d'extraordinaire d'apprendre ça. 2 - La différence avec une Debian sur x86
Le Raspberry Pi, contrairement à une machine de bureau, ne peut booter que sur la carte SD, il est impossible de le faire booter depuis une clé USB par exemple. Cela implique donc qu'il n'y a pas d'installation à proprement parler, mais on va flasher sur une carte SD une version de Debian conçue pour le Raspberry Pi qui se nomme « Raspbian ». 3 - Pré-requis⋅ Un PC sachant faire tourner un client SSH ;⋅ Un Raspberry Pi connecté à Internet ; ⋅ Une carte SD et un lecteur de cartes SD sur le PC ; ⋅ Une clé USB branchée sur le Raspberry Pi. Conventions :
4 - Installation et chiffrementCommençons par télécharger l'image, sur le poste de travail; la décompresser et la flasher sur la carte SD :
wget -q https://downloads.raspberrypi.org/raspbian_lite_latest -O raspbian.zip − Téléchargement : 4 minutes en VDSL 40Mbits/s ; − dézippage : 1 minute sur une machine à base de processeur i3 ; − flashage : 2 minutes sur une carte µSD SanDisk de classe 10.
Depuis la fin 2016 l'équipe dévellopant Raspbian a décidé de compliquer la vie des users, sans prévenir sur la page de téléchargements sinon c'est pas drôle, en ajoutant une procédure supplémentaire. Il faut désormais poser un fichier dénommé « ssh » sur la partition /boot.
Une fois flashée, inserez la carte SD dans le Raspberry Pi, allumez le et connectez le à votre routeur.
nmap 192.168.10.0/24 -sP
puis connectons nous en SSH sur le Raspberry Pi. L'utilisateur par défaut est « pi » et son mot de passe « raspberry ».
ssh pi@raspberrypi
On va commencer par passer root, puis définir un mot de passe, puis créer un user autre que « pi ».
sudo su
Bien ! La sonnette est à notre nom, le coup de pinceau de la mise à jour est terminée et la peinture est sèche. Il est temps d'installer les softs de première nécessité :
apt-get -y -q install busybox cryptsetup dropbear rsync rpi-update ntpdate && update-rc.d ssh enable
Personnalisons l'hostname, par défaut « raspberry » par le nom souhaité pour notre machine, içi « framboise » :
sed "s/raspberrypi/framboise/" -i /etc/hostname
Lancons l'utilitaire Raspi-config
raspi-config
Première chose à faire : aller dans les options de boot, choisir un prompt sur une console en mode texte, avec login requis.
Ensuite il va falloir indiquer le fuseau horaire dans lequel le Raspberry est situé. 5 Internationalisation Options → I2 Change Timezone Europe → Paris. À adapter évidemment si vous ne vous trouvez pas dans le même fuseau horaire que moi. Ensuite quittez l'utilitaire, qui vous demandera au passage s'il convient de rebooter. Choisissez « YES ».
Abandonnons le Raspberry Pi un instant pour revenir sur le PC principal en extraire votre clé SSH publique et la transférer au Raspberry Pi:
ssh-copy-id -i ~/.ssh/id_rsa.pub thy@framboise
On va pouvoir se connecter à notre Raspberry Pi, mais cette fois avec notre nom d'utilisateur (ici « thy » pour l'exemple) et le bon nom de la machine ( donc « framboise »).
ssh thy@framboise
su && deluser --remove-home pi
et lançons mkinitramfs, en donnant en argument la version du kernel utilisé sur le coup :
mkinitramfs -o /boot/initramfs.gz $(uname -r)
🕐 : 30 secondes Quelques erreurs vont surgir et des caractères bien étranges, une clé SSH, vont apparaitre, rien d'affolant. Il est temps d'éditer quelques fichiers. On commencera par indiquer au noyau que la racine ne se trouve plus au même endroit qu'avant : sed -e "s|root=/dev/mmcblk0p2|root=/dev/mapper/usbcrypt cryptdevice=/dev/sda1:usbcrypt|" -i /boot/cmdline.txt On continue en éditant /boot/config.txt :
echo initramfs initramfs.gz 0x00f00000 >> /boot/config.txt
echo 'command="/scripts/local-top/cryptroot && kill -9 `ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3`"' > /etc/initramfs-tools/root/.ssh/authorized_keys
echo $(cat /home/thy/.ssh/authorized_keys) >> /etc/initramfs-tools/root/.ssh/authorized_keys
cp /etc/ssh/ssh_host_rsa_key.pub /etc/initramfs-tools/root/.ssh/id_rsa
sed -e "s|/dev/mmcblk0p2|/dev/mapper/usbcrypt|" -i /etc/fstab
Il serait bon d'indiquer que « usbcrypt », ca se trouvera sur la clé USB, soit /dev/sda1, pour ce faire : echo -e "usbcrypt\t/dev/sda1\tnone\tluks" >> /etc/crypttab Sur les Raspberry Pi l'USB peut mettre du temps à être reconnu, ce qui peut poser problème, corrigons cela en temporisant 5 secondes :sed "s/configure_networking\ \&/echo \"USB se réveille en douceur\"\nsleep\ 5\nconfigure_networking\ \&/" -i /usr/share/initramfs-tools/scripts/init-premount/dropbear
Crééons une partitions sur la clé USB, ou le disque dur externe : fdisk /dev/sda
Maintenant que la partition est crée, chiffrons la, ouvrons la et formattons la : cryptsetup -v -y luksFormat /dev/sda1 Tapons « YES » en capitales.Puis la phrase de passe, puis la confirmation.
cryptsetup -v luksOpen /dev/sda1 usbcrypt
mkfs.ext4 /dev/mapper/usbcrypt
Ensuite montons dans deux répertoires distincts la partition (en clair) de la carte SD et celle, chiffrée de la clé USB :
mkdir /tmp/rootplain && mount /dev/mmcblk0p2 /tmp/rootplain/
rsync -a /tmp/rootplain/ /tmp/rootcrypt/
🕐 : 8 minutes À ce stade les fichiers de configuration sont prêts, la partition / est chiffrée et déplacée sur la clé USB. Il ne reste plus qu'à générer pour de bon l'initramfs avant de rebooter :
mkinitramfs -o /boot/initramfs.gz $(uname -r) && update-initramfs -u && reboot
Parfait ! ssh root@framboise
Maintenant que nous sommes loggués, il ne reste plus qu'à déchiffrer le volume Luks. Nous l'avions déjà fait tout à l'heure pour copier les données, avant le reboot, la syntaxe est donc ressemblante :
/sbin/cryptsetup luksOpen /dev/sda1 usbcrypt
ps | grep {cryptroot} | grep -v grep
Tuons donc le processus 161 :
kill 161
exit
ssh thy@framboise
Et profiter maintenant de son Raspberry Pi déverrouillable à distance, et dont les données sont en théorie inviolables. Ho, une dernière chose pour la route, effacer la partition root de la carte SD.
su
Gérer les mises à jour de l'OSPour mettre à jour votre distribution Raspbian :
ntpdate -u fr.pool.ntp.org && apt-get -q -y update && apt-get -q -y upgrade && rpi-update
À noter : Prenez la première version du kernel si vous utilisez un RPI 1, par exemple 4.4.14+. Et la deuxième (4.4.14-v7+) dans le cas d'un RPI2. (personne ne m'as encore offert de RPI3 pour tester, si vous voulez savoir, vous savez ce qu'il vous reste à faire) mkinitramfs -o /boot/initramfs.gz 4.4.14-v7+ && update-initramfs -u && reboot
5 - Bonus 1 : transférer sur une mémoire plus importante
Après tout ce travail vous n'avez peut être envie de ne pas tout recommencer à la moindre occasion. Il va donc s'agir de sauvegarder le contenu de la carte SD et de la clé USB.
df -h
![]() Un disque de 7G dont 5.6 sont libres. Comme précédemment, nous allons effacer le contenu du disque pour ensuite créer une partition : fdisk /dev/sdb
![]() Puis créer un volume chiffré dans la dite partition, pour ensuite le formater :
cryptsetup -v -y luksFormat /dev/sdb1 ![]() 🕐 : 30 secondes Puis monter la partition chiffrée de la seconde clé USB Et enfin copier le contenu de la première vers la seconde.
mkdir /tmp/root1 && mount /dev/mapper/usbcrypt /tmp/root1 Un reboot (en ne conservant que le nouveau disque dur) plus tard, on peut constater que la place disponible est plus importante qu'avant nous avons désormais 13G de libre : ![]() 6 - Bonus 2 : Gérer ses passphrasesvoir l etat des slots :
cryptsetup luksDump /dev/sda1
cryptsetup luksAddKey /dev/sda1
cryptsetup luksKillSlot /dev/sda1 0
8 - Références
|