Chiffrement du disque dur après installation

Récemment, j’ai eu besoin de chiffrer un disque dur, après installation de Ubuntu 14.04.

Crédit : Yuri Samoilov

Dans la mesure où le chiffrement du disque dur est pris en compte par l’installeur Ubuntu, au moins dans sa version Alternate, certains diront que la solution la plus simple consiste à refaire l’installation. C’est probablement vrai. Mais cela occulte le plaisir à relever un défis technique. Et puis, ce n’est pas moi qui avait fait la première installation. Du coup, j’avais peur d’oublier certains réglages fait initialement.

Sur le principe, la solution est assez simple :

  1. On copie toutes les données ;
  2. On refait le partitionnement du disque avec la couche de chiffrement ;
  3. On repose les données sur les nouvelles partitions ;
  4. On adapte la configuration d’Ubuntu pour prendre en compte une partition chiffrée ;
  5. On reboote et on savoure notre réussite (ou on retourne à une des étapes précédentes).

Sauvegarde

Ma première idée était d’utiliser Clonezilla mais la procédure d’installation m’a effrayé (faut dire que j’ai commencé ce bidouillage tard dans la nuit). Je me suis ensuite souvenu d’une bonne expérience avec partimage/fsarchiver. Ces logiciels n’étant pas disponibles dans Ubuntu, j’ai créé une clef USB bootable avec SystemRescueCD en suivant le tutoriel dédié.

La suite des opérations me donnera raison car ce système à la fois léger est plutôt complet sera très utile.

Après avoir branché un disque dur USB monté sur /mnt/backup, j’ai donc fait une sauvegarde des partitions.

# fsarchiver savefs /mnt/backup/orig.fsa /dev/sda5 /dev/sda7 /dev/sda9

Partitionnement

Maintenant que les données sont copiées, que le disque dur USB est démonté et débranché (pour éviter les grosses bétises), on peut passer à l’étape destructrice et à la reconstruction des partitions.

Le principe du chiffrement de disque est plutôt bien expliqué sur le tutoriel d’Ubuntu-fr mais lors de mes recherches nocturnes, j’étais plutôt tombé sur le tutoriel proposé par ArchLinux. Coté organisation, j’ai choisi le principe d’un container chiffré avec un conteneur LVM pour créer plusieurs partitions.

Avec cfdisk on détruit les partitions existantes et on recré une seule grosse partition avec le code 8E.

On initialise le container LUKS.

# cryptsetup -v luksFormat /dev/sdaX
# cryptsetup open --type luks /dev/sdaX lvm

On initialise les partitions dans LVM (pour l’exemple, on utilise deux partitions pour / et /home, mais chacun ses goûts).

# pvcreate /dev/mapper/lvm
# vgcreate MyStorage /dev/mapper/lvm
# lvcreate -L 8G MyStorage -n swapvol
# lvcreate -L 15G MyStorage -n rootvol
# lvcreate -l +100%FREE MyStorage -n homevol

Enfin, on initialise les systèmes de fichiers, bien que ce soit probablement inutile car FSarchiver va tout écraser.

# mkfs.ext4 /dev/mapper/MyStorage-rootvol
# mkfs.ext4 /dev/mapper/MyStorage-homevol
# mkswap /dev/mapper/MyStorage-swapvol

Restaurer les données

Maintenant, on peut reposer toutes les données.

# fsarchiver restfs /mnt/backup.orig.fsa id=0,dev=/dev/mapper/MyStorage-rootvol
# fsarchiver restfs /mnt/backup.orig.fsa id=1,dev=/dev/mapper/MyStorage-homevol

Notez les valeurs de l’option id et notament que cela commence à 0 (zéro).

Adapter le système

Le principe d’un système avec un / chiffré est que le /boot n’est pas chiffré et que le système intermédiaire stocké dans /initrd.img contient les outils nécessaires pour déchiffrer la partition hébergeant /. Et là, on apprécie le fait que Ubuntu 12.04 intègre tout cela sans nous demander beaucoup d’effort. En effet, cela se limite à installer les paquets crypsetup et lvm2 et configurer le fichier /etc/crypttab.

Oui, mais comment on fait puisque le système n’est pas en état de démarrer ? Pas de soucis, on peut faire tout ça depuis notre SystemRescueCD. Puisqu’on va avoir besoin d’installer des paquets, il va nous falloir un accès internet, que l’on configure sans plus attendre depuis SystemRescueCD (je vous laisse choisir votre solution).

On va donc reconstruire l’arborescence du futur système sous /custom.

# mount /dev/mapper/MyStorage-rootvol /mnt/custom
# mount /dev/sda1 /mnt/custom/boot
# mount /dev/mapper/MyStorage-homevol /mnt/custom/home
# mount --bind /proc /mnt/custom/proc
# mount --bind /sys /mnt/custom/sys
# mount --bind /dev /mnt/custom/dev

On bascule dans ce pseudo-système.

# chroot /mnt/custom /bin/bash

Et nous voici super-utilisateur (root) dans notre futur système. On installe donc les paquets (probablement) absents.

# apt-get install cryptsetup lvm2

Cette simple opération relance une mise à jout de initrd.img afin que ces outils soient disponibles dès les premières phases du boot.

On configure /etc/crypttab.

# cat >> /etc/crypttab <<EOF
luks       UUID=2505567a-9e27-4efe-a4d5-15ad146c258b
EOF

Le champ UUID correspondant à l’identifiant de la partition hébergeant le container chiffré. On peut trouver sa valeur avec la commande blkid.

Une fois le fichier /etc/crypttab mis à jour, on relance une mise à jour du initrd.img.

# update-initramfs -u

Reboot

Et voilà, on reboote et normalement, ça marche on peut booter sur disque et Ubuntu nous demande la clé pour déchiffrer le disque dur. Heureusement, car il est tard.

Astuce

Si, pour une raison ou un autre, vous devez itérer, vous vous demanderez sans doute comment on active les partitions LVM.

# vgchange -a y MyStorage

Références