jeudi 13 mai 2010

Installation d'une Ubuntu avec LUKS+LVM

1. Introduction

Pour des raisons évidentes de sécurité je chiffre les disques de mes machines. Certaines de ces machines sont utilisées par plusieurs personnes, et le partage des passphrases n'est pas toujours aisé. Pour éviter de les partager j'utilise LUKS qui va stocker plusieurs passphrases possibles pour déchiffrer le disque.
Voici comment j'ai procédé pour une Ubuntu Lucid Lynx 10.04.

2. Première phase : préparation et initialisation des partitions à chiffrer.

Il faut tout d'abord booter en mode "LiveCD" et ne pas lancer une installation directement.

Une fois le "LiveCD/USB" booté, lancez un terminal et passez en root

sudo su -


2.1 Partitionnement des disques

Il faut dans un premier temps partionner le disque, dans mon cas je fais 3 partitions :

  1. sda1 : une partition en NTFS pour Windows 7 (nul n'est parfait ;)
  2. sda2 : la partition pour /boot (seule partition de mon système qui ne sera pas chiffrée et on comprend pourquoi : cela constitue le principal talon d'Achile de ce système, il possible de mettre le /boot sur une clé USB par exemple)
  3. sda3 : la partition qui va contenir mon volume LVM chiffré.
Pour ça vous pouvez utiliser l'utilitaire cfdisk :


2.2 Mise en place du chiffrement

Il faut initialiser la partition qui va recevoir le LVM chiffré avec des données aléatoires. Cela prend pas mal de temps, mais si vous avez une machine multi-core, on peut réduire le temps d'initialisation.

Pour initialiser (ici on a deux cores) :

PROC=2; (for((i=0;i<$PROC;i++)); do echo "process $i" >&2 ; cat /dev/urandom & done; cat /dev/random & ) |dd  of=/dev/sda3 bs=1024

Quelques heures plus tard, on peut lancer l'installation ...

On commence par charger les modules kernel relatifs au chiffrement des disques :

modprobe aes
modprobe dm-crypt

Après on formate la partition chiffrée au format LUKS, il faut taper YES (en majuscule) et entrer votre passphrase (deux fois) :

cryptsetup luksFormat --cipher=aes --key-size=256 --hash=sha256 /dev/sda3

résultat de la commande :

WARNING!
========
This will overwrite data on /dev/sda3 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Il faut maintenant créer un "device" qui va faire le lien entre LVM et le système chiffré.

cryptsetup luksOpen /dev/sda3 diskcrypt

Entrez la passphrase cela donne :

Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.



2.3 Mise en place de LVM

Le CD d'installation de la Lucid (l'officiel) ne contient pas LVM, il faut donc installer lvm2.

apt-get install lvm2

Nous allons créer respectivement un "physical volume" (PV), un "volume group" (VG) dans ce dernier et 3 "logical volumes" (LV) dans ce volume group.

Les trois LV sont nommés root pour "/" (taille 10 Go), swap pour le "swap" (2 Go) et home pour "/home" (la taille restante)

pvcreate /dev/mapper/diskcrypt
vgcreate vg-pc /dev/mapper/diskcrypt
lvcreate -n root -L 10000 vg-pc
lvcreate -n swap -L 2000 vg-pc
lvcreate -n home -l 100%FREE vg-pc

pour voir les tailles de chaque LV :

lvdisplay -C

résultat de la commande :

  LV   VG    Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  home vg-pc -wi-a- 28.69g                                      
  root vg-pc -wi-a-  9.77g                                      
  swap vg-pc -wi-a-  1.95g

On va initialiser les partitions pour présenter correctement à l'installer d'Ubuntu chaque LV.

Voici les 3 commandes à taper (à noter que j'utilise de l'EXT4) :

mkswap /dev/mapper/vg--pc-swap
mkfs.ext4 /dev/mapper/vg--pc-home
mkfs.ext4 /dev/mapper/vg--pc-root

Tout est prêt pour l'installation de la distribution.

3. Installation de la distribution

Lancez l'installation en cliquant sur l'icône située sur le bureau.

voici les 3 premières étapes :


Lorsque vous arrivez à l'étape 4 il faut sélectionner l'option qui permet de spécifier les partition manuellement  :


et ensuite il faut pour la partition de boot et les LV choisir le point de montage,  le type de partition (ici EXT4) et cocher le formatage.

Vous devez obtenir quelque chose comme ça :



Et vous pouvez terminer l'installation, mais surtout à la fin ne pas redémarrer la machine, car il faudra effectuer une dernière opération pour finaliser l'installation et permettre au système de démarrer avec le disque chiffré.

Fin de l'installation :




/!\ Attention bien choisir de continuer et non pas redémarrer /!\ :


4. Finir l'installation

Pour commencer on va se "chrooter" dans la distribution fraichement installée

Pour ça il faut taper dans le terminal sous l'utilisateur root :

cd /mnt
mkdir root
mount -t ext4 /dev/mapper/vg--pc-root /mnt/root
mount -t ext3 /dev/sda2 /mnt/root/boot
mount -t ext4 /dev/mapper/vg--pc-home /mnt/root/home
chroot /mnt/root
mount -t proc proc /proc
mount -t sysfs sys /sys

Ensuite il faut installer les packages cryptsetup et lvms :

apt-get update
apt-get install cryptsetup lvm2


Après on éditer le fichier /etc/crypttab comme suit :
# <target name> <source device>  <key file> <options>
diskcrypt         /dev/sda3       none            luks,retry=1,lvm=vg-pc

Il faut ajouter les modules pour l'initrd, on edite le fichier /etc/initramfs-tools/modules et on ajoute les 3 modules essentiels pour le déchiffrement du disque.


aes
dm-crypt
sha256

Ensuite on régénère le fichier d'initrd :

update-initramfs -k all -c


Enfin on vérifie que les données sont bien prises en compte :

cd /tmp
mkdir verif
cd verif
zcat /boot/initrd.img-$(uname -r)|cpio -iv
cat /tmp/verif/conf/conf.d/cryptroot

le résultat est le suivant :

target=diskcrypt,source=/dev/sda3,key=none,rootdev,lvm=vg--pc-root,lvm=vg-pc

On peut désormais terminer :

umount /proc
umount /sys
sync
exit
umount /mnt/root/boot
umount /mnt/root/home
umount /mnt/root

Et vous pouvez redémarrer ...

Au boot le système vous demande la passphrase :

Et le système démarre pour avoir enfin la mire de login :

Aucun commentaire:

Enregistrer un commentaire