YannStatic
  • Etiquettes
  • Liens
  • Aide

KVM EndeavourOS avec chiffrement complet du disque LVM sur LUKS2

  • virtuel
  • chiffrement
  • lvm
  •  18 juin  2024
Afficher/cacher Sommaire

LUKS est un format standard sur disque pour le chiffrement des disques durs. Il utilise le chiffrage par mappeur de périphérique (dm-crypt) et est implémenté en tant que module du noyau pour gérer le chiffrage au niveau du périphérique de bloc.
LVM est un outil de gestion des volumes logiques qui comprend l’allocation de disques, le striping, le mirroring et le redimensionnement des volumes logiques.

LUKS peut être utilisé avec LVM pour créer des volumes extensibles/chiffrés. L’une des options les plus robustes et les plus extensibles consiste à créer un volume chiffré à l’intérieur d’un volume logique.

  • créez un groupe de volumes LVM d’un ou plusieurs disques
  • utiliser le groupe de volumes pour créer des volumes logiques LVM
  • appliquer le chiffrage au système de fichiers des volumes logiques LVM

L’utilisation d’un volume logique permet de monter les disques au démarrage et peut être étendu dynamiquement sans sacrifier la sécurité.


EndeavourOS - Installation chiffrée LUKS sur LVM

Chiffrement complet du disque : LVMonLUKS avec une partition d’accueil (home) séparée et hibernation avec un fichier d’échange (swap)

Machine virtuelle

Pour une installation dans un environnement virtuel, créer en ligne de commande un disque dans la zone de travail ~/virtuel/KVM/

 qemu-img create -f qcow2 eos-lvm-luks.qcow2 30G

Ouvrir le gestionnaire Virtual Machine Manager pour création

  • Nom : EndeavourOS
  • Processeurs : 2
  • Mémoire : 4096 Mo
  • VirtIO Disque 1 : eos-lvm-luks.qcow2
  • SATA CD-ROM 1 : ~/FreeUSB2To/iso/EndeavourOS_Gemini-2024.04.20.iso
  • Réseau : NAT
  • Hyperviseur KVM Q35 UEFI

Démarrer machine virtuelle

Démarrer la machine virtuelle EndeavourOS

Vous arrivez sur la page de sélection

Valider le choix par défaut

Changer language en FR

Cliquer sur Démarrer l’installation

“on line” pour choisir l’environnement bureau XFCE






Partionnement

  • Partition 1 : 512M EFI (code ef00) système de fichier FAT32 flag boot
  • Partition 2 : 22G UNFORMATTED
  • Partition restante : EXT4 Chiffré racine / (8Go)

Installer EndeavourOS chiffré

Lancer l’installation

eos-vm
eos/eos49
Même MP admin

Une fois l’installation terminée, **Redémarrer et tester ** le système crypté LUKS

Redémarrer sur Sata CDROM

SATA CD-ROM 1 : Endeavouros_Cassini_Nova-03-2023_R3.iso
Ordre de démarrage : SATA CD-ROM 1

Basculer en FR et ouvrir un terminal

Pour un accès sur la machine via SSH
Lancer le service : sudo systemctl start sshd
Ouvrir le port 22 firewall: sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
Créer un mot de passe à liveuser : passwd liveuser Relever l’adresse ip de la machine : ip a

Configurer le nouveau système LVMonLUKS

Convertir Déchiffrer et monter le système temporaire

Ouvrir un Terminal ,basculer en mode su

Conversion chiffrement luks2 du système temporaire chiffré /dev/vda3 (luks1)

cryptsetup convert /dev/vda3 --type luks2
WARNING!
========
This operation will convert /dev/vda3 to LUKS2 format.


Are you sure? (Type 'yes' in capital letters): YES

Confirmer par la saisie YES

Si vous installé une version EndeavourOS “Gemini” , la partition est chiffée LUKS2 et vous avez le message suivant Device is already LUKS2 type.

Saisir (ou marquer et copier la ligne avec ctrl-c et coller dans le terminal avec shift-ctrl-v )

cryptsetup luksOpen /dev/vda3 crypttemp # saisir la phrase mot de passe de l'installation
mkdir -p /media/crypttemp
mount /dev/mapper/crypttemp /media/crypttemp 

Nos données d’installation temporaires sont désormais accessibles sous /media/crypttemp et peuvent être copiées sur le nouveau système que nous allons mettre en place dans les prochaines étapes.

Configurer le nouveau système LVMonLUKS

Chiffrer la partition /dev/vda2

cryptsetup luksFormat --type luks2 /dev/vda2

Une demande de confirmation est exigée

WARNING!
========
This will overwrite data on /dev/vda2 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/vda2: 
Verify passphrase: 

Choisissez un mot de passe sécurisé ( https://xkcd.com/936/ )
Ouvrir la partition chiffrée

cryptsetup luksOpen /dev/vda2 crypt #    Enter passphrase for /dev/vda2:
pvcreate /dev/mapper/crypt          #    Physical volume "/dev/mapper/crypt" successfully created.
vgcreate vg0 /dev/mapper/crypt      #    Volume group "vg0" successfully created

Disque virtuel de 30G, Partition libre 22G

lvcreate -L 17G vg0 -n lvroot             #  Logical volume "lvroot" created.
lvcreate --extents 100%FREE vg0 -n lvhome #  Logical volume "lvhome" created.

Créez un système de fichiers ext4 sur les volumes logiques.

mkfs.ext4 -L root /dev/mapper/vg0-lvroot
mkfs.ext4 -L home /dev/mapper/vg0-lvhome

Monter le nouveau système sur /mnt

Monter le nouveau système sur /mnt pour les systèmes UEFI

mount /dev/mapper/vg0-lvroot /mnt
mkdir -p /mnt/home
mount /dev/mapper/vg0-lvhome /mnt/home
mkdir -p /mnt/efi
mount /dev/vda1 /mnt/efi
lsblk

devrait maintenant fournir une sortie similaire à la suivante pour les systèmes UEFI :

NAME             MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
loop0              7:0    0  1.7G  1 loop  /run/archiso/airootfs
sr0               11:0    1  1.9G  0 rom   /run/archiso/bootmnt
vda              254:0    0   30G  0 disk  
├─vda1           254:1    0  512M  0 part  /mnt/efi
├─vda2           254:2    0 21.5G  0 part  
│ └─crypt        253:1    0 21.5G  0 crypt 
│   ├─vg0-lvroot 253:2    0   17G  0 lvm   /mnt
│   └─vg0-lvhome 253:3    0  4.5G  0 lvm   /mnt/home
└─vda3           254:3    0    8G  0 part  
  └─crypttemp    253:0    0    8G  0 crypt /media/crypttemp

Copier le système temporaire

pour vider les nouveaux points de montage

rsync -avA /media/crypttemp/ /mnt

Veuillez patienter quelques minutes

Démonter le système temporaire

umount /media/crypttemp
cryptsetup luksClose crypttemp

Ajouter un fichier de clé existant LUKS

Nous allons maintenant ajouter une clé

touch /mnt/crypto_keyfile.bin
cryptsetup luksAddKey /dev/vda2 /mnt/crypto_keyfile.bin
Enter any existing passphrase:     # saisie à la création du chiffrement de la partition /dev/vda2

Configurer “crypttab”

Configuration /etc/crypttab

cryptsetup luksUUID /dev/vda2

renvoie 5ce1764a-4bc8-4f44-a089-d4462a0f0569
Votre UUID sera différent, alors **assurez-vous d'utiliser votre UUID à l'étape suivante !**

nano /mnt/etc/crypttab

contient une ligne non commentée commençant par luks-…
Remplacez cette ligne par la suivante ; **n'oubliez pas d' utiliser votre UUID**

cryptlvm UUID=5ce1764a-4bc8-4f44-a089-d4462a0f0569 /crypto_keyfile.bin luks

Sauvegarder et quitter.

Basculer en chroot

Passer en chroot

arch-chroot /mnt

Configurer “fstab”

Configurer /etc/fstab

blkid -s UUID -o value /dev/mapper/vg0-lvroot

renvoie l’UUID du volume racine : 286fb826-b364-4f3b-a6a4-6834991c3261.

blkid -s UUID -o value /dev/mapper/vg0-lvhome

renvoie l’UUID du volume d’accueil : 80eecc50-960a-40aa-939a-8625d39dc2f7.

nano /etc/fstab

contient une ligne commençant par /dev/mapper/luks-…
Supprimez cette ligne et ajoutez ce qui suit (**n'oubliez pas d' utiliser vos UUID**)

UUID=286fb826-b364-4f3b-a6a4-6834991c3261 / ext4 defaults,acl,noatime,discard 0 0
UUID=80eecc50-960a-40aa-939a-8625d39dc2f7 /home ext4 defaults,acl,noatime,discard 0 0

Sauvegarder et quitter.

Ajout fichier échange (OPTION)

Utilisez dd pour créer un fichier d’échange de la taille de votre choix.
Création d’un fichier d’échange de 1024 Mo (pour tous les systèmes de fichiers)

dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress

Remplacez count=1024 par la quantité de Mo que vous souhaitez installer pour l’utilisation du fichier d’échange :

chmod 600 /swapfile

Pour donner au fichier d’échange des permissions de racine seulement.

mkswap /swapfile

Pour faire du fichier un espace de pagination et enfin pour activer le fichier :

swapon /swapfile

Modifier /etc/fstab pour activer le fichier d’échange

nano /etc/fstab

Ajoutez la ligne suivante…

/swapfile                                 none  swap defaults,pri=-2 0 0

Sauvegarder et quitter.

Remarque : le fichier d’échange doit être spécifié par son emplacement sur le système de fichiers, et non par son UUID ou son LABEL.

pour vérifier :

swapon --show
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2

Modifier les options du noyau

Dans systemd-boot, vous éditez le fichier d’entrée approprié qui se trouve sur votre partition EFI dans le répertoire loader/entries
Chaque entrée est une option de démarrage dans le menu et chacune a une ligne appelée options. Vous pouvez modifier ces entrées directement, mais ces changements peuvent être écrasés lors de l’installation ou de la mise à jour de paquets.

Pour effectuer les changements, au lieu de modifier les entrées, modifiez le fichier /etc/kernel/cmdline qui est un fichier d’une ligne contenant une liste d’options du noyau.

nano /etc/kernel/cmdline

UUID de /dev/vda2 : blkid -s UUID -o value /dev/vda2

nvme_load=YES nowatchdog rw rd.luks.uuid=5ce1764a-4bc8-4f44-a089-d4462a0f0569 root=/dev/mapper/vg0-lvroot

Exécutez ensuite sudo reinstall-kernels qui remplira les entrées et régénérera les initrds.

reinstall-kernels

Sortie du chroot

exit

Redémarrer

Retirer le cd live

reboot

FINI! Vous devriez maintenant avoir un système LVMonLUKS fonctionnel avec un volume logique séparé pour /home.

Tester le nouveau système LVMonLUKS chiffré

Dans le boot, saisir la phrase de passe pour déchiffrer le disque

Puis on arrive sur la pade de connexion

Ajouter la partition temporaire à la partition chiffrée (FACULTATIF)

Vous pouvez simplement reformater /dev/vda3 et l’utiliser comme stockage non chiffré, mais ici, nous allons récupérer l’espace et l’attribuer, par exemple, à notre volume personnel.

Redémarrez dans l’environnement Live-Cd.

Ouvrir un terminal en mode su

Supprimer vda3 (installation temporaire EndeavourOS)

fdisk -l

affiche des informations concernant nos disques et partitions.

Nous allons maintenant supprimer /dev/vda3. Entrez simplement les caractères ci-dessous dans l’ordre indiqué.

fdisk /dev/vda
> p
> d
> 3 (delete partition 3)
> w (write changes to disk)

Agrandir la partition et le groupe de volumes

Opération fdisk

fdisk /dev/vda
> d
> 2 (delete partition 2)
> n
> 2 (recreate partition 2)
>   (first sector is 'default'; press enter)
>   (last sector is 'default'; press enter)
> n (keep existing filesystem signature)
> w (write changes to disk)

Ouvrir la partition chiffrée saisir la phrase de passe

cryptsetup luksOpen /dev/vda2 crypt # saisir la phrase de passe
cryptsetup resize crypt -v          # saisir la phrase de passe
# Si tout OK --> Command successful.
e2fsck -f /dev/mapper/vg0-lvroot
e2fsck -f /dev/mapper/vg0-lvhome

pvresize /dev/mapper/crypt

Le groupe de volumes vg0 contient maintenant l’espace que nous avons libéré en supprimant /dev/vda3. Il a été ajouté en tant qu’espace libre pouvant être utilisé pour des instantanés ou une affectation future au volume racine ou d’accueil (ce que nous ferons à l’étape suivante) ou à des volumes supplémentaires (nouveaux).

Augmenter le volume home

Quelques informations sur la façon de convertir/calculer les secteurs, MB, PE’s :

  • sectors / 2048 / 4 = PE
  • PE *4 = MiB *2048 = sectors
    Si vos calculs renvoient un PE non entier, vous devez l’arrondir à l’inférieur !
fdisk -l
vgdisplay
lvdisplay

fournira des informations concernant l’espace utilisé (alloué) et libre.

Exemples de différentes possibilités :

  • développer lvroot par 32326 PE
    lvextend -l +32326 /dev/mapper/vg0-lvroot
  • étendre le volume à 150 Go
    lvextend -L 150G /dev/mapper/vg0-lvroot
  • augmenter le volume de 10 Go
    lvextend -L +10G /dev/mapper/vg0-lvroot
  • remplir tout l’espace non alloué dans le groupe de volumes
    lvextend -l +100%FREE /dev/vg0-lvroot

Mais nous allons maintenant ajouter tout l’espace précédemment libéré au volume d’accueil .

lvextend -l +100%FREE /dev/mapper/vg0-lvhome

Size of logical volume vg0/lvhome changed from 3.60 GiB (922 extents) to 11.48 GiB (2939 extents).

Le système de fichiers résidant dans notre volume logique doit également être ajusté.
Nous augmenterons le système de fichiers à la taille maximale pour ajouter les 8 Go.

resize2fs -p /dev/mapper/vg0-lvhome

Vérifions le système de fichiers des volumes logiques redimensionnés…

e2fsck -f /dev/mapper/vg0-lvhome

FINI! Vous pouvez quitter l’environnement live-cd et redémarrer dans votre système LVMonLUKS.

Clavier (GRUB)

Il est impossible de définir un clavier autre que US avant la saisie du code de déchiffrement lors de la phase démarrage GRUB

Convertisseur QWERTY / AZERTY
Convertissez un texte que vous auriez écrit en AZERTY avec un clavier QWERTY et inversement

Ajouter fichier échange avec hibernation de travail (FACULTATIF)

Créer un fichier d’échange

Remarque : Si vous souhaitez utiliser l’hibernation, vous devez ajouter un swap car le contenu de la RAM sera écrit sur la partition/fichier de swap. Cela signifie également que la taille du swap doit être au moins égale à la taille de la RAM. Lisez ici sur le choix des tailles d’échange par exemple.

Choisissez la taille de votre fichier d’échange (par exemple “8” pour 8 Go).

swapsizeGB=8

Les commandes suivantes produiront un fichier d’échange avec la taille choisie :

swapsize=$(( swapsizeGB * 1024 ))
sudo dd if=/dev/zero of=/swapfile count=$swapsize bs=1MiB status=progress

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Vérifier …

swapon --show

Modifier /etc/fstab pour activer le fichier d’échange après le redémarrage

sudo nano /etc/fstab

Ajoutez la ligne suivante…

/swapfile none swap defaults,pri=-2 0 0

Sauvegarder et quitter.

Activer l’hibernation

sudo blkid -s UUID -o value /dev/mapper/vg0-lvroot

renvoie l’UUID du volume racine. Par exemple 53d2a76e-13b8-4a29-affc-197b33a706c1

sudo filefrag -v /swapfile | awk '{if($1=="0:"){print $4}}'

renvoie le décalage du fichier d’échange. Par exemple 997376.., ce qui signifie 997376.

sudo nano /etc/default/grub

Ajoutez l’ entrée resume=UUID= et resume_offset= à la fin de GRUB_CMDLINE_LINUX_DEFAULT= (**n'oubliez pas d'utiliser votre UUID et offset**)

GRUB_CMDLINE_LINUX_DEFAULT="[...] resume=UUID=53d2a76e-13b8-4a29-affc-197b33a706c1 resume_offset=997376"

Sauvegarder et quitter.

Si vous n’avez pas déjà suivi l’étape 11 et ajouté resume à /etc/mkinitcpio.conf, faites-le maintenant…

sudo nano /etc/mkinitcpio.conf

Modifiez la HOOKS=ligne… en ajoutant resume (avant les systèmes de fichiers).

HOOKS="base udev autodetect modconf block keyboard keymap encrypt lvm2 resume filesystems fsck"

Sauvegarder et quitter.

Faites savoir au système que certaines choses ont changé…

sudo mkinitcpio -p linux
sudo grub-mkconfig -o /boot/grub/grub.cfg

FINI! Vous devriez maintenant avoir un fichier d’échange et pouvoir hiberner.

Liens

  • Installer un Ubuntu chiffré avec LUKS, LVM et un partitionnement personnalisé
  • How to encrypt LVM volumes with LUKS
  • Full disk encryption: LVMonLUKS with a separate home partition and hibernation with a swapfile
  • Installation d’Archlinux en UEFI & chiffré
  • Configurer le chiffrement LUKS sur Arch Linux – Indice Linux

Annexe

Clé FIDO pour déchiffrement au boot

Déverrouillage au boot d’un disque entièrement chiffré LUKS2

Installer la librairie libfido : sudo pacman -S libfido2 Vérifier que la YubiKey est insérée dans un port USB Lister présence clé : systemd-cryptenroll --fido2-device=list

PATH         MANUFACTURER PRODUCT              
/dev/hidraw2 Yubico       YubiKey OTP+FIDO+CCID

Enroler la clé, la phrase de passe du disque est demandée. Le disque chiffré est /dev/vda2

sudo systemd-cryptenroll --fido2-device=auto /dev/vda2
🔐 Please enter current passphrase for disk /dev/vda2: ***********             
Requested to lock with PIN, but FIDO2 device /dev/hidraw2 does not support it, disabling.
Initializing FIDO2 credential on security token.
👆 (Hint: This might require confirmation of user presence on security token.)
Generating secret key on FIDO2 security token.
👆 In order to allow secret key generation, please confirm presence on security token.
New FIDO2 token enrolled as key slot 2.

Pour la prise en charge de cette clé FIDO , il faut modifier le fichier /etc/crypttab

#cryptlvm UUID=5ce1764a-4bc8-4f44-a089-d4462a0f0569 /crypto_keyfile.bin luks
cryptlvm UUID=5ce1764a-4bc8-4f44-a089-d4462a0f0569 /crypto_keyfile.bin luks,discard,fido2-device=auto

Reconstruire le noyau

sudo reinstall-kernels

Arrêter la machine virtuelle
Options de démarrage sur VirtIO Disque 1
Redémarrer

Déverrouiller sa session Linux avec une Yubikey

  • Déverrouiller sa session Linux avec une Yubikey

Eos VM

La machine virtuelle
Le dossier chiffré cryptlvm sur /dev/vda2

Partage répertoire hôte avec un invité

EndeavourOS est installé sur une machine virtuelle QEMU/KVM

  • QEMU/KVM + virtio-fs - Partager un répertoire hôte avec une machine virtuelle

Copier/Coller entre hôte et invité

Il faut installer spice-vdagent sur l’invité

Plymouth

Installer plymouth

yay -S plymouth 

Modifier les options du noyau kernel /etc/kernel/cmdline , ajouter splash

nvme_load=YES nowatchdog rw splash rd.luks.uuid=5ce1764a-4bc8-4f44-a089-d4462a0f0569 root=/dev/mapper/vg0-lvroot

Modifier le fichier /etc/crypttab

cryptlvm UUID=5ce1764a-4bc8-4f44-a089-d4462a0f0569 /crypto_keyfile.bin luks,discard,fido2-device=auto

Reconstruire

sudo reinstall-kernels

Redémarrer la machine virtuel

Si vous n’avez pas de clé FIDO enregistrée, le mot de passe de déchiffrement est demandé

PRÉCÉDENTcwwk - Service LLdap
SUIVANTSyncthing synchronisation de fichiers pair à pair
Recherche