[tuto] linux sur lvm2 et luks

Questions et astuces concernant l'installation et la configuration d'archlinux
Avatar de l’utilisateur
rafmav
yeomen
Messages : 272
Inscription : mer. 11 mars 2009, 13:30

[tuto] linux sur lvm2 et luks

Message par rafmav »

Retour d'expérience: j'ai installé les "trois ailes": lvm2 luks linux.

Ben en fait j'ai tout crypté sauf boot, et j'ai eu du mal avec les explications données sur le site anglais... surtout pour un newbie et parce que la "short version" (version courte) donnée à la fin est erronée ou pas assez bien ficelée pour un novice... j'ai dû recommencer tout plusieurs fois! et j'ai quelques commentaires à faire! Voici de mémoire ce que j'ai fait!

J'ai téléchargé archlinux core 64 bits et l'ai copié sur une clé usb, et j'ai booté mon nouveau laptop avec.
j'ai utilisé dd ou autre, j'ai oublié (cf tutos).

J'ai partitionné le disque de 250 Go avec le résultat suivant:

Code : Tout sélectionner

#fdisk
/dev/sda1 # partition de boot (taille d'une clé USB de 64Mo)
/dev/sda2 # partition pour un autre linux (ubuntu)  (taille d'une clé USB de 16Go: sauvegardes dessus)
/dev/sda3 # # partition de swap pour l'autre linux (ubuntu) (4 Go)
/dev/sda4 # partition étendue...
/dev/sda5 # partition destinée au lvm
Il me reste donc environ 230Go pour tester archlinux avec lvm et luks...

J'ai effacé aléatoirement mon disque:

Code : Tout sélectionner

cryptsetup -d /dev/random -c aes-xts-plain -s 512 create lvm /dev/sda5
dd if=/dev/urandom of=/dev/mapper/lvm
cryptsetup remove lvm
Ce, même si en fait ces instructions me semblent surtout destinées à effacer le disque dur de son contenu avec des données aléatoires. C'est long et à mon avis peu utile sur un disque dur neuf! Ca a tourné toute une nuit!
Je n'ai jamais utilisé /dev/random, bien trop lent! il y a aussi "badblocks" ou un truc qui s'appellerai frandom (plus rapide et avec barre de progression), mais je suis allé au plus simple.

J'ai créé un fichier de clé sur une clé USB montée pour l'occasion dans /root du système de fichier lancé par la clé conteant archlinux core:

Code : Tout sélectionner

mkdir /root/key
mount /dev/sdb1 /root/key
dd if=/dev/urandom of=/root/key/mykeyfile bs=512 count=1 # ou l'inverse bs=1 et count=512
J'ai créé un volume physique, puis mon groupe de volumes logiques, et mes volumes logiques

Code : Tout sélectionner

lvm pvcreate /dev/sda5 # volume physique sur sda5
lvm vgcreate lvm /dev/sda5 # groupe de volume n'incluant que sda5 et s'appelant "lvm"
lvm lvcreate -C y -L 16G -n root lvm # volume racine "/" (alias root) de 16Go; (taille d'une clé USB)
# -C y c 'est pour que ce soit sur une zone contigue...
lvm lvcreate -L 4G -n swap lvm # volume de /swap (échange) de 4Go
lvm lvcreate -L 4G -n tmp lvm # volume de /tmp de 4Go
lvm lvcreate -L 4G -n var lvm # volume de /var de 4Go
lvm lvcreate -L 16 Go -n home lvm # volume de /home de 16Go (taille d'une clé USB).
J'ai ensuite vérifié tout ça:

Code : Tout sélectionner

# pvdisplay -c
/dev/sda5:lvm:405368082:-1:8:8:-1:4096:49483:39243:10240:fszL6x-7Cfo-S5tp-c3mu-fjFe-We05-Mwf1tC
# vgdisplay -c
  lvm:r/w:772:-1:0:4:4:-1:0:1:1:202682368:4096:49483:10240:39243:qiEoTd-OcxQ-6kIc-ws9e-8hLe-DPFW-wN6bsI
# lvdisplay -c
  /dev/lvm/root:lvm:3:1:-1:1:33554432:4096:-1:2:-1:254:0
  /dev/lvm/swap:lvm:3:1:-1:1:8388608:1024:-1:2:-1:254:1
  /dev/lvm/tmp:lvm:3:1:-1:1:8388608:1024:-1:2:-1:254:2
  /dev/lvm/home:lvm:3:1:-1:1:33554432:4096:-1:2:-1:254:3
J'ai ensuite activé tous les volumes logiques (étape indispensable surtout si reboot, car sinon les volumes logiques ne sont par défaut pas actifs).en revanche, une fois activés ils sont en lecture-écriture (et non en lecture seule):

Code : Tout sélectionner

lvm vgchange -ay
J'ai ensuite formaté le volume destiné à "/", qui s'appelle root, (mais n'a rien à voir avec /root dans l'arboresence linux; là, j'aurai peut-être mieux fait de l'appeler arch ou linux, enfin bon c'est fait...)

Code : Tout sélectionner

cryptsetup luksFormat -c aes-xts-plain -s 512 /dev/lvm/root /root/key/mykeyfile
cryptsetup luksOpen /dev/mapper/lvm-root root /root/key/mykeyfile
de plus, j'aurais dû ouvrir /dev/mapper/lvm-root sous un nom plus parlant, par exemple luks-root

Je n'ai pas fait ça, j'ai laissé le soin à /arch/setup de le faire (ou plutôt il me force à le refaire, donc inutilie de le faire 2 fois):

Code : Tout sélectionner

#mkreiserfs /dev/mapper/root
#mount /dev/mapper/root /mnt

J'ai ajouté un phrase de passe clé puisque les partitions cryptées avec "luks" peuvent en avoir jusqu'à 8, et on peut ajouter ou révoquer une ou plusieurs clés quand on veut: c'est plus prudent en cas de perte de la clé USB...

Code : Tout sélectionner

# cryptsetup luksAddKey /dev/mapper/root --key-file /root/key/mykeyfile --key-slot 1
J'ai entré et confirmé 2 fois ma nouvelle phrase de passe... que j'ai bêtement appelée "key" car ici il s'agit d'essais!
(--key-file donne la clé d'accès permettant de s'authentifier avant de créer la nouvelle clé! --key-slot permet de l'ajouter dans le "slot" que l'on veut (il y en a 8, donc de 0 à 7).

Là je me suis perdu, et je n'ai finalement pas fait ça du tout :

Code : Tout sélectionner

# dd if=/dev/zero of=/dev/sda1 bs=1M # effacement comme pour toute à l'heure
# mkreiserfs /dev/sda1
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
# mkdir -p -m 700 /mnt/etc/luks-keys
# dd if=/dev/urandom of=/mnt/etc/luks-keys/home bs=1 count=512
# /arch/setup

Car au cours de mes essais, ça n'allait pas: l'installeur d'arch formate systématiquement les partitions et n'y garde donc pas ce qui s'y trouve. En fait je crois que j'ai utilisé deux écrans en mode console: un pour /arch/setup ou je l'ai laissé formater et monter /dev/mapper/root sur /mnt et /dev/boot sur /mnt/boot: une fois que ça c'est fait, c'est bon, il accepte de passer à la suite (installer les paquets et me laisser le configurer). puis ensuite dans l'autre écran j'ai fait les manips d'au dessus, et l'installeur a "cru" que tout allait bien et était bien monté.

J'ai donc fait ça:

Code : Tout sélectionner

# /arch/setup
choix de la source, de la zone, etc, jusqu'au partitionnement du disque, où j'ai choisi la méthode manuelle: j'ai sélectionné /dev/mapper/root pour / et /dev/sda1 pour /boot, et j'ai choisi reiserfs pour chacun. Et uniquement ça: pas de /home ou /tmp ou /swap: je les crée après sur des volumes. C'est là que je suis passé au deuxième écran, et j'ai fait ainsi:

J'ai créé une clé différente pour chaque volume, stockée dans le futur /etc :

Code : Tout sélectionner

# mkdir -p -m 700 /mnt/etc/luks-keys
# dd if=/dev/urandom of=/mnt/etc/luks-keys/home bs=1 count=512
# dd if=/dev/urandom of=/mnt/etc/luks-keys/swap bs=1 count=512
# dd if=/dev/urandom of=/mnt/etc/luks-keys/tmp bs=1 count=512

J'ai donc fait ça (et idem pour "swap" et "tmp"):

Code : Tout sélectionner

# cryptsetup luksFormat -c aes-xts-plain -s 512 /dev/lvm/home /mnt/etc/luks-keys/home
# cryptsetup luksOpen /dev/mapper/lvm-home home --key-file  /mnt/etc/luks-keys/home
# mkreiserfs /dev/mapper/home
# mkdir /mnt/home
# mount /dev/mapper/home /mnt/home
# cryptsetup luksAddKey /dev/mapper/home --key-file /mnt/etc/luks-keys/home
J'ai pris la même précaution: ajouter une clé "manuelle" non aléatoire, toujours "key" ici, puisque les partitions cryptées avec "luks" peuvent en avoir jusqu'à 8, et on peut ajouter ou révoquer une ou plusieurs clés quand on veut: c'est plus prudent en cas de perte de la clé...

Je suis repassé ici à la console où s'exécute "/arch/setup" et j'ai repris à l'étape où j'en était: j'ai choisi et installé mes paquets, puis suis passé à la configuration:

/etc/rc.conf

Code : Tout sélectionner

USELVM="yes"
/etc/mkinitcpio.conf

Code : Tout sélectionner

MODULES="reiserfs"
HOOKS="base resume udev autodetect pata scsi sata usb lvm2 encrypt filesystems usbinput keymap"
L'important c'est d'avoir la prise en charge de l'usb au démarrage (pour lire la clé USB qui contient la phrase de passe aléatoire créée plus haut), ainsi que des volumes logiques (lvm2) et du cryptage (encrypt), sinon ça ne démarrera pas!

Là j'ai oublié de créer les fichiers spécifiques à la swap pour le support "suspend-to-disk" (cf plus bas). C'est mieux de les créer à cette étape, en utilisant la console en ligne de commande, puis en repassant à celle de /arch/setup. Mais ça marche quand même. J'ai réédité ce post et les ai rajoutés ici pour plus de clarté, mais non testé lors de mon installation, puisqu'oubliés! (ils sont créés dans /mnt car la racine du futur système de fichier a été montée dans /mnt par /arch/Setup).

/mnt/lib/initcpio/hooks/openswap

Code : Tout sélectionner

# vim: set ft=sh:
run_hook ()
{
    cryptsetup luksOpen /dev/mapper/swap swap -d /etc/luks-keys/swap
}
/mnt/lib/initcpio/install/openswap

Code : Tout sélectionner

# vim: set ft=sh:

install ()
{
    MODULES=""
    BINARIES=""
    add_file "/etc/luks-keys/swap"
    FILES=""
    SCRIPT="openswap"
}

help ()
{
cat<<HELPEOF
  This opens the swap encrypted partition /dev/<device> in /dev/mapper/swapDevice
HELPEOF
}

Là retour à la console de /arch/setup :

/etc/fstab

Code : Tout sélectionner

# 
# /etc/fstab: static file system information
#
# <file system>        <dir>         <type>    <options>          <dump> <pass>
none                   /dev/pts      devpts    defaults            0      0
none                   /dev/shm      tmpfs     defaults            0      0

#/dev/cdrom             /media/cd   auto    ro,user,noauto,unhide   0      0
#/dev/dvd               /media/dvd  auto    ro,user,noauto,unhide   0      0
#/dev/fd0               /media/fl   auto    user,noauto             0      0

/dev/mapper/home        /home   reiserfs        defaults        0       1
/dev/mapper/root        /       reiserfs        defaults        0       1
/dev/mapper/swap        swap    swap            defaults        0       0
/dev/mapper/tmp         /tmp    reiserfs        defaults        0       1
/dev/sda1               /boot   reiserfs        defaults        0       2
/etc/crypttab

Code : Tout sélectionner

home    /dev/lvm/home   /etc/luks-keys/home
swap    /dev/lvm/swap   /etc/luks-keys/swap
tmp     /dev/lvm/tmp    /etc/luks-keys/tmp
/boot/grub/menu.lst

Code : Tout sélectionner

# general configuration:
timeout   5
default   0
color light-blue/black light-cyan/blue
splashimage=/boot/splash.xpm.gz
# (0) Arch Linux
title  Arch Linux
root   (hd0,0)
kernel /vmlinuz26 cryptdevice=/dev/lvm/root:root cryptkey=/dev/sdb1:ext3:/mykeyfile root=/dev/mapper/root ro vga=792
initrd /kernel26.img
# () Arch Linux Fallback
title  Arch Linux
root   (hd0,0)
kernel /vmlinuz26 cryptdevice=/dev/lvm/root:root cryptkey=/dev/sdb1:ext3:/mykeyfile root=/dev/mapper/root ro vga=792
initrd /kernel26-fallback.img
Après reboot, je n'ai rien eu à faire. Ah si: retrouver la clé USB, rangée dans un tiroir!
Ou sinon utiliser la phrase de passe de secours, que j'ai appelée "key" pour les test... à révoquer ensuite absolument pour une autre phrase de passe bien plus solide (cryptsetup luksDelKey ou luksKillSlot)! La clé usb permet d'éviter que le lancement de linux s'arrête pour demander d'entrer la clé!

Il me reste les étapes suivantes:
- faire une sauvegardes des "cryptheaders" sur quelque chose de sûr car si ces zones du disque dur sont endommagées... bonjour les dégâts!
- effacer et remplacer les phrases de passe manuelles pour l'instant très faibles car nommés "key".
- regarder du côté de la "swap" avec suspend-to-disk support, mais ça peut être fait ensuite: seul l'action sur la partition racine / doit être faite avant l'installation.
- voir pour stocker la clé plus discrétement sur la clé USB entre le MBR et la première partition de la clé... si c'est vraiment utile.

Quelques remarques:
- à quoi ça sert de crypter le disque aléatoirement avant d'installer tout ça, mystère... étape à ne pas refaire si la suite est foirée: j'ai simplement rebooté et tout recommencé sans refaire cette étape...
- le maillon faible, c'est la clé USB: il ne faut pas la perdre, sinon gare! ou bien avoir une très bonne phrase de passe en prime, et ne pas l'oublier...
- attention si une ou d'autres clés USB sont présentes: elles peuvent être reconnues comme /dev/sdb1 à la place de la clé qui contient le fichier de mot de passe... et ça démarrera en demandant une phrase de passe! donc il faut les enlever avant de démarrer!
- au niveau performances, je ne sais pas l'effet, mais il est clair que les commandes dans / doivent être décryptées avant exécution...
- là c'est luks qui est mis par dessus lvm, et sur chaque volume logique, qui a chacun sa clé de cryptage, et j'aurai pu n'utiliser que la clé de root pour tout le monde
- je n'ai pas essayé l'inverse: "lvm over luks": cryptage au niveau volume physique ou groupe de volumes, qui serait éventuellement préférable... et personne ne verrait où sont réellement les volumes logiques voir le groupe de volumes...
- tout passe par /dev/mapper deux fois: lvm puis luks...
- celui qui trouve la clé de root trouve toutes les autres clés dans /etc/luks-keys/...
- au cryptage global de home, il aurait été préférable un cryptage par utilisateur présent dans /home...
- grub et boot : ils ne sont pas cryptés, il faut verrouiller l'accès au fichier menu.lst (cf tuto sur grub)... ou premettre à grub de trouver où sont ses fichiers au démarrage, ainsi que vmlinuz et initrd, mais si leur adresse sur le disque est cryptée... dur dur!
- j'ai des volumes logiques dont je pourrais changer la taille, et cryptés!

Bibliographie: le tutoriel du wiki anglais: http://wiki.archlinux.org/index.php/LUKS et les tutoriels du wiki d'archlinux.fr sur lvm et l'installation ont été mes amis lors de l'installation!
Dernière modification par rafmav le ven. 01 janv. 2010, 22:20, modifié 3 fois.
#rmv$@f29£8µ1
Ma petite paresse me perdra...
Si vous ne voulez pas vous tromper, ne faites rien!
Impossible est impossible: est venue une personne qui ne savais pas que c'était impossible, et qui l'a fait!
Avatar de l’utilisateur
chipster
Maître du Kyudo
Messages : 2063
Inscription : ven. 11 août 2006, 22:25
Localisation : Saint-Étienne (42)
Contact :

Re: [lll] linux sur lvm2 et luks

Message par chipster »

Pas mal même si ça reste quand même pour les parano ;)
On peut utiliser lvm2 à d'autres fins que celles du cryptage
Reformattes ton topic pour dire que tu fais un tuto ;)
Avatar de l’utilisateur
rafmav
yeomen
Messages : 272
Inscription : mer. 11 mars 2009, 13:30

Re: [tuto] linux sur lvm2 et luks

Message par rafmav »

je ne sais pas bien si ça peut servir de tutoriel, mais bon...

ah oui, il y a un truc dans /arch/setup pour créer des partitions soit dm-crypt soit lvm, mais pas les 2 en même temps (c'est peut-être ce qui manque), et pas de "luks"; et je n'ai de plus pas compris comment ça marche!

j'essayerais de faire l'inverse luks puis lvm... voir si ça marche... quand j'aurai le temps!
#rmv$@f29£8µ1
Ma petite paresse me perdra...
Si vous ne voulez pas vous tromper, ne faites rien!
Impossible est impossible: est venue une personne qui ne savais pas que c'était impossible, et qui l'a fait!
Répondre