.png)
Ich versuche, eine LUKS-verschlüsselte CentOS 7-Installation mit separater /boot
Partition 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 linux
Es ist jedoch kein mkinitcpio
Befehl oder /etc/mkinitcpio.conf
eine Änderungsliste vorhanden HOOKS
, damit lvm
es encrypt
richtig funktioniert.
Allerdings gibt es nur initrd
das, 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 /boot
Chroot:
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 initramfs
anstelle 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 mount
bei 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.