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 :
- On copie toutes les données ;
- On refait le partitionnement du disque avec la couche de chiffrement ;
- On repose les données sur les nouvelles partitions ;
- On adapte la configuration d’Ubuntu pour prendre en compte une partition chiffrée ;
- 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