Arch Linux – UEFI Boot mit Grub und verschlüsseltem LVM

Hallo Zusammen,

heute widme ich mir mal wieder einer Linux-Geschichte. Im Grunde geht es um mein Standardsetup für meine Linux-Kisten (wenn es um Desktop-Versionen geht). Ich verwende hier sehr gerne Arch Linux insbesondere aus drei Gründen:

Beim heutigen Thema geht es lediglich um die Konfiguration der Partionen und die Installation von Grub und dem UEFI Bootloader. Alles weitere kann den Anleitungen im Arch Wiki entnommen werden. Diese sind extrem ausführlich und sehr gut!

Was möchte ich haben? Und warum?

Meine Ideale Konfiguration sieht wie folgt aus:

                     +-------+--------------------------+
                     |       |                          |
                     | SWAP  |       Systemplatte       |
                     |       |                          |
+----------------------------+--------------------------+
|                    |                                  |
|   UEFI/Grub Boot   | Verschlüsselter Container (LUKS) |
|                    |                                  |
+--------------------+----------------------------------+

Am Anfang der Festplatte befindet sich eine 512 MB große Partition für das UEFI Boot-System und den Grub Bootloader. Der Rest wird verwendet für eine LUKS verschlüsselte Partition. Innerhalb dieser ist das eigentliche Betriebsystem mit SWAP und System. Dadurch sind meine Daten und das gesamte Betriebsystem verschlüsselt. Direkt nach dem Bootloader muss ein Passwort eingegeben werden, welches den LUKS Container entsperrt und anschließend wird normal das System gebootet.

Wie bekomme ich das hin?

Im Grunde ist alles im sehr ausführlichen Arch Wiki beschrieben. Leider sind die einzelnen Artikel aber teilweise leicht versteckt und es gibt Diskrepanzen zwischen den Übersetzungen. Einige Punkte sind nur im deutschen Wiki beschrieben, Anderes nur im englischen Wiki. Ich halte mich gerne an den Beginners guide: https://wiki.archlinux.org/index.php/Installation_guide

1. Festplatte partitionieren

Zunächst partitionieren wir die Festplate.

fdisk -l

Damit finden wir raus, unter welchem Device die Festplatte zu finden ist (in meinem Fall /dev/sda).

gdisk /dev/sda

Ich Arbeite gerne mit gdisk. Die wichtigsten Befehle:

o      # Neue Tabelle anlegen
n      # Neue Partition erstellen
w      # Schreibe Tabelle auf die Festplatte

Weitere Infos zu den Befehlen und wie man die Partitionen anlegt: https://wiki.archlinux.de/title/GPT
Das erstellte Partitionsschema sollte dann wie folgt aussehen:

/dev/sda1	512M	ef00	EFI System
/dev/sda2	REST	8E00	Linux Filesystem

2. Crypt-Container auf sda2 erstellen

Nun erstellen wir den verschlüsselten Container auf sda2 mit LUKS.
Mehr Infos: https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS
Mehr Infos zu cryptsetup: https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode

# Verschlüssele /dev/sda2
cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/sda2

# Öffnet verschlüsselten Cotainer wieder und mapped auf "lvm"
cryptsetup open --type luks /dev/sda2 lvm

3. LVM innerhalb des LUKS-Containers erstellen

Wir haben zwar jetzt einen (offenen) verschlüsselten Container, haben darin aber noch kein LVM. Dieses folgt nun mit folgenden Befehlen:

vgcreate main /dev/mapper/lvm		# Erstelle Volume Group auf /dev/mapper/lvm mit Namen "main"
lvcreate -L 32G main -n swap		# Erstelle 32GB SWAP
lvcreate -l 100%FREE main -n root	# Erstelle root mit Rest

Achtet bitte beim letzten Befehl darauf: Ein kleines „-l“ kein „-L“. Zum Swap: Ich halte mich nach wie vor daran: 2x RAM-Größe = SWAP-Größe

4. Filesystem erstellen

Jetzt fehlt nur noch das Filesystem auf den innerhalb des Containers erstellten Partitionen und der UEFI Partition am Anfang. Die UEFI Partiton MUSS Fat32 formatiert werden.

mkfs.ext4 /dev/mapper/main-root
mkswap /dev/mapper/main-swap
mkfs.fat -F 32 /dev/sda1

5. Mounten des Systems

Jetzt mounten wir nur noch die Festplatten an die richtige Stelle und wir können das Grundsystem installieren:

mount /dev/mapper/main-root /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
swapon /dev/mapper/main-swap

Ab hier kann mit der Installation laut Anleitung fortgefahren werden, bis ihr zum Erstellen des Linux-Kernels kommt!

6. Hooks für Linux-Kernel anpassen

Folgende Datei muss angepasst werden: /etc/mkinitcpio.conf

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

Danach folgenden Befehl ausführen:

mkinitcpio -p linux

7. GRUB installieren

Jetzt wollen wir noch unseren Bootloader auf die UEFI-Platte schmeißen. Weitere Infos dazu: https://wiki.archlinux.de/title/UEFI_Installation#GRUB

Zunächst erst mal die efi-Variablen laden und die wichtigsten Pakete installieren.

mount -t efivarfs efivarfs /sys/firmware/efi/efivars
pacman -S grub efibootmgr dosfstools

Wenn ihr einen intel-CPU habt, noch folgendes Paket installieren:

pacman -S intel-ucode

Nun muss die Datei /etc/default/grub wegen unserer Verschlüsselung angepasst werden.

GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:main root=/dev/mapper/main-root lang=de locale=de_DE.UTF-8"

Anschließend installieren wir grub und erstellen uns eine Config. Achtet darauf, dass hier keine Fehler ausgegeben werden.

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug
grub-mkconfig -o /boot/grub/grub.cfg

Update: Luks Passwort hinzufügen / löschen / ändern

Beinahe vergessen, aber ab und an will man dann doch einen Key hinzufügen bzw. ändern/löschen:

Um die vorhandenen Schlüssel anzuzeigen:

sudo cryptsetup -y luksDump /dev/sda2

Um einen neuen Key hinzuzufügen:

sudo cryptsetup -y luksAddKey /dev/sda2

Um einen Key zu löschen:

sudo cryptsetup -y luksRemoveKey /dev/sda2

Beim letzten Befehl wird man dann gefragt, welches Passwort entfernt werden soll. Vorher UNBEDINGT einen neuen Key hinzufügen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.