Dans cet article, vous lirez un peu sur mes étranges recherches pendant le congé de maladie forcé. Il s'agira de plusieurs choses à la fois, qui ne sont pas des «bonnes pratiques», mais aussi possibles! Voici donc un tutoriel sur la façon d'installer Archlinux (ma distr préférée) afin que:
- sans / boot séparé (juste dans / root)
- / sur lvm
- lvm à l'intérieur du conteneur luks
- avec UEFI
- dans une machine virtuelle.
avec démarrage sécurisé ("difficile" dans la machine virtuelle a peu de chances de réussir)
Il est à noter que tout sera crypté à l'exception de la partition système EFI avec un seul fichier grubx64.efi - une application EFI pour exécuter grub.
Si vous êtes intéressé, bienvenue au chat!
Tout d'abord, j'ai tout installé sur mon ordinateur portable Lenovo X240, puis pour écrire un article, j'ai utilisé une machine virtuelle avec OVMF dans Proxmox.
Configuration du banc d'essai:
Tout est créé de façon assez standard. L'image utilise mon arc préféré, qui peut toujours être téléchargé depuis
Yandex .
Ensuite, quelques points sur le virtuel dans Proxmox concernant UEFI. Pour tester le fonctionnement du stand avec UEFI (sinon ce ne sera pas si intéressant), vous devez définir OVMF au lieu de SeaBIOS dans les propriétés de la machine virtuelle:

Ensuite, ajoutez le disque UEFI en conséquence, pour obtenir quelque chose comme ceci:

Nous pouvons maintenant démarrer la machine virtuelle et commencer le processus d'installation. Dans la console de la machine virtuelle, démarrez immédiatement le service sshd, définissez le mot de passe root et recherchez l'adresse DHCP de la machine virtuelle:

Ensuite, nous pouvons continuer à travailler sur ssh pour le rendre plus pratique.
Disposition du disque
Donc, après avoir déjà connecté via ssh, nous avons d'abord réglé l'heure pour que plus tard il ne s'avère pas que les systèmes de fichiers seront créés à l'avenir:
timedatectl set-ntp true && timedatectl set-timezone Europe/Moscow
Vérifiez que tout est correct:
root@archiso ~
Nous pouvons maintenant commencer à partitionner le disque. À ce stade, j'ai un lecteur / dev / vda, comme Contrôleur Virtio et ceci est juste un disque vide sans table de partition:
root@archiso ~
Nous le diviserons en 2 partitions:
- disque fat32 pour les applications UEFI (EFI_system_partition)
- Conteneur LUKS avec tout le reste
Utilisez gdisk pour créer le GPT:
root@archiso ~
Ensuite, créez la première partition pour EFI avec le type EF00 (partition système EFI):
Command (? for help): n Partition number (1-128, default 1): First sector (34-31457246, default = 2048) or {+-}size{KMGTP}: Last sector (2048-31457246, default = 31457246) or {+-}size{KMGTP}: +512M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): <b>EF00</b> Changed type of partition to 'EFI System'
Créez maintenant une partition pour LUKS, où nous ne nous préoccuperons même pas du type et la laisser telle quelle:
Command (? for help): n Partition number (2-128, default 2): First sector (34-31457246, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-31457246, default = 31457246) or {+-}size{KMGTP}: <b>Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'</b>
Nous noterons les modifications et terminerons avec le balisage de partition:
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/vda. The operation has completed successfully.
Création d'un conteneur LUKS et de systèmes de fichiers
Avec la première section (vda1), tout est assez simple. Nous avons juste besoin de le formater et pour l'instant c'est tout:
root@archiso ~
La deuxième partition est le conteneur que vous devez d'abord préparer. Nous formater la partition via cryptsetup et définir la phrase secrète:
root@archiso ~
*** Je n'ai pas pris la peine de choisir des chiffres, avec une randomisation remplacée par urandom et autres, mais j'ai juste créé un conteneur par défaut.
Ensuite, ouvrez le conteneur en spécifiant la même phrase secrète:
root@archiso ~
Nous avons maintenant un conteneur ouvert accessible via le mappeur de périphériques:
root@archiso ~
Maintenant, nous pouvons continuer avec lvm (j'écrirai rapidement, car ce n'est pas un sujet):
root@archiso ~
Ensuite, créez les systèmes de fichiers sur notre lv:
root@archiso ~
Maintenant, tout cela peut être monté pour installer le système de base. Le point d'installation sera / mnt, où la racine de notre futur système commencera:
[root@archiso ~]
*** / boot / efi Je crée pour que / boot lui-même reste sur / dev / mapper / rootvg-root, et que le dossier efi soit déjà monté sur / dev / vda1 (partition fat32 efi): [root@archiso ~]
Vérifiez les points de montage actuels (toujours utiles):
[root@archiso ~]
Comme nous le voyons, tout est honnête et maintenant il est temps de mettre l'arc lui-même.
Installation du système de base
Installez les packages de base à partir des ensembles de base et de base-devel à l'aide du package pacstrap (vous pouvez y mettre tout ce que vous voulez et en plus de cela):
pacstrap /mnt base base-devel
Tout démarre parfaitement, le système de base est prêt. Naturellement, j'ai retiré la conclusion. Maintenant, nous pouvons configurer ce système pour démarrer et fonctionner.
À partir des choses de base, nous générons immédiatement fstab:
genfstab -pU /mnt >> /mnt/etc/fstab
Ensuite, faites arch-chroot dans ce nouveau système:
[root@archiso ~]
*** arch-chroot est un utilitaire très utile, car il fait tout par lui-même. Bien que vous puissiez toujours utiliser le chroot standard, avant de le faire, suivez les instructions dans le gentoo-handbook wiki.gentoo.org/wiki/Handbook : AMD64 / Installation / Base section «Montage des systèmes de fichiers nécessaires»Configurez immédiatement l'heure système et le nom d'hôte:
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime && \ hwclock --systohc && \ echo luks-test > /etc/hostname
Définissez le mot de passe root:
[root@archiso /]
Décommentez les paramètres régionaux requis dans /etc/locale.gen:
[root@archiso /]
Nous les générerons:
[root@archiso /]
Configurez-les immédiatement pour le système et la console:
[root@archiso /]
Configurez maintenant le fichier /etc/mkinitcpio.conf, qui est responsable des options, des hooks, etc. lors de la génération d'initramfs:
vi /etc/mkinitcpio.conf
La chose la plus importante est les crochets et leur ordre:
HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck)
*** reprendre le crochet pour démarrer le système après avoir hiberné à partir du swap. Sur une machine virtuelle, ce n'est pas nécessaire. Je l'ai copié de hêtre.Maintenant, nous pouvons générer des initramfs:
[root@archiso /]
Maintenant que nous avons le système, nous devons installer le chargeur de démarrage lui-même. Mon choix est tombé sur grub (2), car il est en quelque sorte plus familier et assez facilement capable de charger le noyau à partir d'une partition chiffrée (enfin, ou je n'en ai pas vraiment cherché d'autres).
Installez le package grub:
[root@archiso /]
Avant de générer la configuration, modifiez les options grub par défaut:
vim /etc/default/grub
ici, vous devez décommenter une ligne importante (pas de commentaire, bien sûr):
et ajoutez (il y a vide par défaut) à GRUB_CMDLINE_LINUX:
GRUB_CMDLINE_LINUX="cryptdevice=UUID=5ad7c9ad-fb17-4839-925e-479432516c07:container"
UUID que j'ai pris de blkid:
[root@archiso /]
Nous générons une configuration pour grub:
[root@archiso /]
Ensuite, installez grub lui-même sur le disque:
[root@archiso /]
*** vous pouvez ajouter --recheck --debug, spécifier l'architecture ... mais ... ça marche vraiment tout seul)Nous allons maintenant éditer / etc / crypttab pour que le système lui-même sache que lors du chargement, il est nécessaire de déchiffrer la section LUKS. Ajoutez la ligne:
echo "container /dev/vda2 none" >> /etc/crypttab
Ce qui signifie que vous devez demander un mot de passe (aucun) pour la partition / dev / vda2 et le présenter déjà comme conteneur via le mappeur de périphériques.
Nous sommes maintenant prêts à quitter chroot et à redémarrer le système:
[root@archiso /]
Passons maintenant à la console de la machine virtuelle pour voir le résultat:

À ce stade, nous avons démarré l'application EFI /boot/efi/EFI/arch/grubx64.efi avec / dev / vda1, qui nous demande un mot de passe pour décrypter notre conteneur.
Ensuite, après avoir entré le mot de passe:

Voici la fenêtre grub familière avec nos options de démarrage depuis /boot/grub/grub.cfg.
À ce stade, grub a déchiffré notre conteneur et a eu accès à ce fichier lui-même (/boot/grub/grub.cfg), au noyau et à initramfs. Après avoir sélectionné l'option, le noyau démarrera par défaut, initramfs:

En fait, le noyau a créé le crochet de chiffrement, qui nous demande à nouveau le mot de passe pour déchiffrer le conteneur (en général, vous devez entrer le mot de passe 2 fois, mais il se peut que vous fabriquiez 2 conteneurs pour le démarrage et la racine à partir d'une paranoïa excessive :)
Et puis, une fois le système entièrement chargé:
PS: pour augmenter le niveau de schizophrénie, seul le démarrage sécurisé ne suffit pas pour signer notre chargeur de démarrage grubx64.efi.
J'ai trouvé peu intéressant de simplement mettre le noyau et les initramfs sur / dev / vda1, comme je l'ai déjà fait 100 fois. D'autres chargeurs de démarrage tels que SHIM, bootctl, etc. ne savent pas comment faire (enfin, si je ne sais pas, dites-le nous dans les commentaires)
Matériel utile sur le sujet et matériel utilisé