Installer un système Debian crypté

Gazette Linux n°140 — Juillet 2007

Adaptation française : Nicolas Provost

Relecture de la version française: Deny

Article paru dans le n°140 de la Gazette Linux de juillet 2007.

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

Prérequis
Les sauvegardes sont importantes
Créer de l'espace dans la partition d'amorçage
Remplissage
Rendre la sauvegarde amorçable
Rester à jour
On recommence...
Remerciements

Il est dorénavant possible de mettre en place un cryptage de données avec le gestionnaire de volumes (LVM) durant l'installation de la nouvelle version de Debian « etch ». Étant donné les derniers faits divers relatant des vols d'ordinateurs portables et donc de données personnelles, il n'est probablement pas trop paranoïaque de vouloir crypter ses disques. Et si quelqu'un me dit le contraire, c'est peut-être qu'il s'intéresse à mes données personnelles !

Une méthode serait de réinstaller Debian sur mon portable à partir d'un cédérom d'installation et après avoir sauvegardé toutes mes données. Mais il est vrai que la manoeuvre manquerait d'intérêt si je devais reconfigurer mon portable totalement. Voici donc une autre méthode.

Prérequis

Voici la configuration proposée, peut-être un peu inhabituelle. Depuis que je connais dmsetup et le gestionnaire de volumes logiques de Linux (Device Mapper), mon disque n'a que deux partitions :

  • /dev/hda1 qui est une petite partition /boot (50-100 Mo)

  • /dev/hda2, partition occupant tout le reste du disque gérée par le gestionnaire de volumes

Cela permet de redimensionner le système de fichiers au besoin. Depuis Debian « Sarge » j'utilise le gestionnaire de volumes logiques Linux (LVM) à la place de dmsetup pour gérer cet espace. Il est plus facile avec LVM d'éviter les erreurs pendant la configuration des disques.

Si votre système est plus « standard » avec plusieurs partitions dédiées à des utilisations bien définies, ne vous inquiétez pas, votre machine pourra être configurée de la même façon.

Les sauvegardes sont importantes

Pour continuer, je dois supposer que vous disposez d'un disque capable de stocker une copie de votre système entier. Ce n'est pas le cas ? Alors utilisez une partition de votre disque pouvant contenir une copie de tout votre système.

Si vous utilisez tout votre disque et que vous n'avez pas de sauvegarde alors arrêtez de lire cet article, allez acheter un disque et revenez lorsque vous êtes prêt à sauvegarder votre système !

Créer de l'espace dans la partition d'amorçage

Supposons donc que /dev/sda contienne suffisamment d'espace libre pour stocker une copie entière de votre système. Probablement, par exemple, un disque externe USB qui demande une configuration un peu particulière pour pouvoir s'amorcer sur ce disque.

La première étape pour créer une sauvegarde amorçable est d'installer les outils utiles après le redémarrage de la machine :

apt-get install cryptsetup lvm2 initramfs-tools grub
apt-get install linux-image-2.6-686

En particulier, nous utiliserons sur cette sauvegarde le noyau et le système d'amorçage Debian (grub et initrd). L'ordre de ces commandes d'installation est important pour être certain que les scripts qui gèrent les disques cryptés et/ou supervisés par LVM soient installés dans initrd. Si le noyau Debian d'origine est déjà installé, exécutez la commande suivante à la place de la deuxième ligne ci-dessus :

update-initramfs -u

Ensuite, on partitionne /dev/sda comme expliqué au début de cet article :

  • /dev/sda1 est une partition suffisamment grande pour contenir /boot.

  • /dev/sda2 pour le reste de l'espace.

On crée un système de fichiers standard ext2 sur /dev/sda1 :

mke2fs -L Boot /dev/sda1

puis on prépare l'autre partition comme partition LVM cryptée :

crypsetup luksFormat /dev/sda2

Une phrase d'authentification est demandée pour pouvoir créer une partition LUKS (Linux Unified Key Setup =cryptage de volumes pour systèmes Linux). L'en-tête d'une partition LUKS contient des informations indiquant comment la partition peut être décryptée à l'aide de la clef générée par cette phrase d'authentification.

Important

Cette phrase d'authentification est très importante. Si vous l'oubliez, vous pouvez perdre toutes les données de votre partition ! Si quelqu'un d'autre la connait, cette personne aura accès à toutes les données de cette partition.

Ainsi, la marquer sur un « post-it » collé sur l'écran serait certainement utile... pour d'autres ! ou bien la sauvegarder sur la partition cryptée en question serait encore mieux. Si vous décidez de ne pas suivre ces conseils stupides, alors il faut conserver cette phrase de protection dans plusieurs endroits sécurisés pour éviter de la perdre.

On peut maintenant utiliser cette partition à l'aide de la commande :

cryptsetup luksOpen /dev/sda2 backup

On crée ainsi /dev/mapper/backup en tant que block device (périphérique par blocs) permettant l'accès transparent à la partition cryptée. Nous allons le préparer avec LVM2. Les commandes :

pvcreate /dev/mapper/backup
vgcreate vgb /dev/mapper/backup

génèrent un groupe de volumes LVM appelé vgb qui contiendra les différents systèmes de fichiers. Les commandes comme :

lvcreate -n root -L 3G vgb
lvcreate -n swap -L 2G vgb
lvcreate -n home -L 10G vgb

peuvent être utilisées pour créer les périphériques bloc /dev/vgb/root, que l'on peut préparer comme d'habitude :

mkswap -L Swap /dev/vgb/swap
mke2fs -j -L Root /dev/vgb/root
mke2fs -j -L Home /dev/vgb/home

Remplissage

La suite des opérations est connue mais la voici néanmoins. On crée d'abord l'arborescence destination avec des commandes comme :

mkdir /tmp/target
mount /dev/vgb/root /tmp/target
mkdir /tmp/target/{boot,home}
mount /dev/vgb/home /tmp/target/home
mount /dev/sda1 /tmp/target/boot

puis on copie les fichiers (sans boucle) :

find . -wholename '/tmp/target' -prune -o -print | cpio -pdum /tmp/target

Pendant ce temps vous pouvez allez chercher votre tasse de café. A moins que vous ne préfériez remplacer -pdum par -pdumv pour tout voir et rester devant votre écran !

Une fois la copie achevée, vérifiez que /tmp/target contient bien tous les fichiers souhaités. La copie cryptée de votre système est terminée.

Rendre la sauvegarde amorçable

La première étape consiste à installer grub dans le secteur de démarrage de /dev/sda :

grub-install --root-directory /tmp/target /dev/sda

Vous devrez probablement modifier le fichier device.map créé par grub :

echo '(hd0) /dev/sda' > /tmp/target/boot/grub/device.map

Il faut également que /etc/fstab corresponde à la nouvelle arborescence de fichiers :

pushd /tmp/target/etc
mv fstab fstab.orig
cat > fstab <<EOF
LABEL=Root / ext3 defaults,errors=remount-ro 0 1
LABEL=Swap swap swap defaults 0 0
LABEL=Boot /boot ext2 defaults 0 1
LABEL=Home /home ext3 defaults 0 2
EOF
popd

Puis précisez la façon dont le disque est crypté :

cat >> /tmp/target/etc/crypttab <<EOF
backup /dev/sda2 none luks
EOF

et enfin modifiez les instructions de démarrage de grub. Pour cela éditez d'abord le fichier /tmp/target/boot/grub/menu.lst, en particulier la ligne commençant par # kopt= qui doit être complétée ainsi  :

# kopt=ro root=/dev/mapper/vgb-root
   cryptopts=source=/dev/sda2,target=backup,lvm=vgb-root
   rootdelay=10

Ici, des sauts de ligne ont été ajoutés pour la lisibilité, mais toutes ces options doivent être sur la même ligne. L'option rootdelay=10 donne 10 secondes au gestionnaire de boot Debian pour reconnaître le disque USB, ce peut être plus ou moins selon votre système.

Vous pouvez également ajouter d'autres options comme vga=791 pour activer l'affichage VESA, etc., mais toujours sur la même ligne.

Ensuite notifiez ces changements de configuration au processus de démarrage grub :

chroot /tmp/target update-grub

puis démontez les disques :

umount /tmp/target/home
umount /tmp/target/boot
umount /tmp/target

et désactivez LVM :

vgchange -an vgb

ainsi que l'accès à la partition cryptée :

cryptsetup remove backup

Vous pouvez maintenant débrancher le disque USB.

Vous disposez à présent d'une sauvegarde amorçable cryptée de votre système. Il est possible que votre portable ne puisse pas amorcer sur un périphérique USB ; dans ce cas vous devrez créer une « disquette de démarrage grub » si vous voulez pouvoir amorcer sur votre sauvegarde cryptée.

Rester à jour

C'est assez facile à réaliser en utilisant rsync que l'on installe ainsi :

apt-get install rsync

La commande à utiliser pour synchroniser la sauvegarde est du type :

rsync -aW --exclude=/tmp/target \
          --exclude=/boot \
          --exclude=/etc/fstab \
          /. /tmp/target/.

Vous devez également éxécuter la commande grub-install si vous n'excluez pas /boot de la mise à jour. Vous pouvez enfin créer un script pour monter la sauvegarde, lancer rsync puis démonter la sauvegarde.

On recommence...

Bien entendu, tout cela ne vous met pas à l'abri d'une perte de données personnelles si votre portable est volé. Vous devez donc maintenant redémarrer votre machine et booter sur votre sauvegarde cryptée ; de toute façon il faut bien que vous testiez votre sauvegarde ! Puis suivez à nouveau les étapes ci-dessus en remplaçant /dev/sda par /dev/hda. Durant le processus, vous pouvez également remplacer les mots backup par laptop et vgb par vg pour éviter les confusions. Dans le cas d'un disque dur interne, l'option rootdelay peut être supprimée.

L'utilisation de LVM a notamment comme avantage de permettre des sauvegardes plus fidèles en réalisant une « image » (snapshot) de votre système plutôt qu'une copie alors que le système est en activité.

Remerciements

Il est vraiment nécessaire de remercier les programmeurs qui ont développé les logiciels permettant de réaliser ces opérations. Dans la plupart des cas, le code source, très lisible, peut être considéré comme une véritable documentation. Merci également au lecteur qui testera ce qui précède.

Kapil Hari Paranjape a l'âme d'un « hacker » depuis l'époque des cartes perforées. Plus précisément, cela veut dire qu'il n'a jamais écrit de « véritable » programme. Il s'est contenté d'expérimenter des programmes écrits par d'autres. Après avoir joué avec Minix en 1990-91, il a pensé écrire son premier logiciel — un « authentique » noyau *nix pour la classe d'ordinateurs x86. Heureusement pour lui, un certain Linus Torvalds l'a devancé — lui évitant ainsi la peine (une fois de plus) d'écrire effectivement du code. En signe de gratitude éternelle, il a passé beaucoup de temps à expérimenter et promouvoir le système Linux et le projet GNU depuis lors, au grand dam de la plupart de son entourage, qui pense qu'il devrait se concentrer sur la recherche en mathématiques — qui est son gagne-pain. L'interaction entre les programmes s'exécutant réellement, ce qui peut être calculé en théorie et ce dont on peut prouver l'existence, continuent de le fasciner.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://wiki.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.