Richtiges manuelles OS-Setup auf einem mit LUKS verschlüsselten Laufwerk mit Nicht-AES-Algorithmus auf einer Yum-basierten Distribution (CentOS)

Richtiges manuelles OS-Setup auf einem mit LUKS verschlüsselten Laufwerk mit Nicht-AES-Algorithmus auf einer Yum-basierten Distribution (CentOS)

Ich versuche, eine LUKS-verschlüsselte CentOS 7-Installation mit separater /bootPartition und LVM auf einem EFI-freundlichen Motherboard durchzuführen.

Ich habe die Partitionierung einer neuen CentOS-Installation von der alten CentOS-Installation (über die GUI installiert) durchgeführt und es sieht folgendermaßen aus:

sdb             8:16   0 745,2G  0 disk  
├─sdb1          8:17   0   200M  0 part  /home/user/target/boot/efi
├─sdb2          8:18   0     1G  0 part  /home/user/target/boot
├─sdb3          8:19   0   700G  0 part  
│ └─crypto    253:3    0   700G  0 crypt 
│   ├─lv-swap 253:4    0    16G  0 lvm   
│   ├─lv-root 253:5    0    50G  0 lvm   /home/user/target
│   └─lv-home 253:6    0   634G  0 lvm   /home/user/target/home

Das Bootstrapping funktionierte auch im CentOS-Chroot (verwendetDasUndDasTutorials) und jetzt bereit zum Generieren des Boot-Image.

Die Sache ist, dass ich beschlossen habe, im Cryptsetup einen nicht standardmäßigen Algorithmus zu verwenden:

cryptsetup -v --cipher serpent-xts-plain64 --key-size 512 --hash sha256 --iter-time 3000 --use-random luksFormat /dev/sdb3

und jetzt frage ich mich, wie ich mit meinen Parametern das richtige Initrd generieren kann.

Tutorials sagen mir, dass der nächste Schritt ist:

mkinitcpio -p linuxEs ist jedoch kein mkinitcpioBefehl oder /etc/mkinitcpio.confeine Änderungsliste vorhanden HOOKS, damit lvmes encryptrichtig funktioniert.

Allerdings gibt es nur initrddas, was mir aufgrund mangelnder Kenntnisse über RPM-basierte Distributionen unbekannt ist. Die Suche nach Initrd-Beispielen für meinen Fall war erfolglos.

Jetzt gibt es mehrere Dateien/Verzeichnisse im /bootChroot:

bash-4.2# ls
config-3.10.0-514.16.1.el7.x86_64  grub2                                     symvers-3.10.0-514.16.1.el7.x86_64.gz
efi                                initramfs-3.10.0-514.16.1.el7.x86_64.img  System.map-3.10.0-514.16.1.el7.x86_64
grub                               lost+found                                vmlinuz-3.10.0-514.16.1.el7.x86_64

Ich bezweifle jedoch, dass sie Serpent-Verschlüsselung oder sogar Luks unterstützen, da diese Dateien während des Bootstrap generiert wurden.

Meine Frage lautet also: Wie erstelle ich ausgehend von der Generierung des Kernel-Images eine korrekte Boot-Toolchain mit Luks und Serpent?

Allerdings sollte ich vielleicht initramfsanstelle von verwenden initrd, daher bin ich auch für alle Hinweise zu diesem Ansatz dankbar.

Antwort1

Endlich bin ich mit der Einrichtung fertig und bereit, den endlichen Befehlssatz darüber, wie es für CentOS 7 funktioniert, freizugeben.

Ich habe die Partitionierung und das manuelle Bootstrapping übersprungen – es gibt anderswo genügend vollständige Handbücher.

Beginnen wir also mit dieser Partitionierungsvariante:

sdb             8:16   0 745,2G  0 disk  
├─sdb1          8:17   0   200M  0 part
├─sdb2          8:18   0     1G  0 part
└─sdb3          8:19   0   700G  0 part  
  └─crypto    253:3    0   700G  0 crypt 
    ├─lv-swap 253:4    0    16G  0 lvm   
    ├─lv-root 253:5    0    50G  0 lvm
    └─lv-home 253:6    0   634G  0 lvm   

Mounten Sie dann die erforderlichen Laufwerke, sodass Folgendes angezeigt wird:

sdb             8:16   0 745,2G  0 disk  
├─sdb1          8:17   0   200M  0 part  /home/user/target/boot/efi
├─sdb2          8:18   0     1G  0 part  /home/user/target/boot
└─sdb3          8:19   0   700G  0 part  
  └─crypto    253:3    0   700G  0 crypt 
    ├─lv-swap 253:4    0    16G  0 lvm   
    ├─lv-root 253:5    0    50G  0 lvm   /home/user/target
    └─lv-home 253:6    0   634G  0 lvm   

Schritt 0. Bereiten Sie das Chroot-Skript vor. Das Wiederholen mountbei jedem Neustart ist mühsam, daher habe ich dieses elementare Chroot-Skript erstellt:

#!/bin/bash
sudo mount /dev/mapper/lv-root /home/user/target
sudo mount /dev/sdb2 /home/user/target/boot
sudo mount /dev/sdb1 /home/user/target/boot/efi
sudo mount --bind /proc /home/user/target/proc
sudo mount --bind /dev /home/user/target/dev
sudo mount --bind /sys /home/user/target/sys
sudo chroot /home/user/target /bin/bash -l

Schritt 1. Installieren Sie fehlende EFI-spezifische Module (außerhalb von chroot):

sudo yum --installroot=/home/user/target install -y efibootmgr grub2-efi-modules

Schritt 2. Bearbeiten/etc/crypttab

crypto UUID=UUID_of_/dev/sdb3 none luks,discard

Grund dafür discard: Ich verwende SSD und vernachlässige ein wenig die Sicherheit für eine bessere TRIM-Leistung.Einzelheiten.

Schritt 3. Bearbeiten/etc/dracut.conf

omit_dracutmodules+="systemd"
add_dracutmodules+="crypt lvm" #sequencing could matter
hostonly="yes" #optional
lvmconf="yes"

Schritt 4. Bearbeiten/etc/fstab

UUID=UUID_of_/dev/sdb1                      /boot/efi       vfat    umask=0077  0 0
UUID=UUID_of_/dev/sdb2                      /boot           ext2    defaults    0 0
UUID=UUID_of_/dev/mapper/lv-root            /               ext4    defaults    0 0
UUID=UUID_of_/dev/mapper/lv-home            /home           ext4    defaults    0 0
UUID=UUID_of_/dev/mapper/lv-swap            none            swap    sw          0 0

Schritt 5. Bearbeiten/etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_CMDLINE_LINUX="rd.lvm.lv=lv/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rd.luks.options=discard rd.luks.uuid=UUID_of_/dev/sdb3 crashkernel=auto rd.lvm.lv=lv/root rd.lvm.lv=lv/home nomodeset"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"

rd.luks.options=discard– ist möglicherweise überflüssig, korrigieren Sie mich, wenn das so ist.

nomodeset- um die Parallelität von Hardwaretreibern zu eliminieren (noveaufb vs. EFI VGA)

Schritt 6. Ausführengrub2-mkconfig -o /boot/grub2/grub.cfg

Schritt 7. Ausführengrub2-install --target=x86_64-efi --efi-directory=/boot/efi

Schritt 8. Ausführendracut -fv

Alle oben genannten Schritte müssen innerhalb von Chroot ausgeführt werden, sofern nicht anders angegeben.

Es stellte sich heraus, dass der gewählte Verschlüsselungsalgorithmus keinerlei Einfluss hatte – Grub hat alle benötigten Treiber automatisch geladen.

Hier sind die Materialien, die mir geholfen haben:1,2,3,4,5

verwandte Informationen