Arch Linux: Installation mit LVM, LUKS, AppArmor, systemd-boot und UEFI Secure Boot mit eigenen Keys (2023)

Vor Kurzem habe ich mein Notebook erfolgreich von Xubuntu auf Arch Linux umgestellt. Wie bei meiner bisherigen Xubuntu-Installation sollte Arch Linux natürlich mit Festplatten-Vollverschlüsselung (mittels LVM on LUKS) sowie aktiviertem AppArmor installiert werden. Außerdem wollte ich als zusätzliche Sicherheitsebene, Arch Linux mit aktiviertem UEFI Secure Boot in Verbindung mit eigenen Secure Boot Keys einrichten. In diesem Zusammenhang sollte zudem systemd-boot anstatt GRUB als Bootloader zum Einsatz kommen. Wie ich das Ganze umgesetzt habe, könnt ihr in diesem Beitrag lesen.

Folgende Software wurde verwendet:

  • Arch Linux

Vorbereitung - bootfähigen USB-Stick erstellen

Arch-Linux-Installationsimage herunterladen

Im ersten Schritt ist das Installationsimage für Arch Linux herunterzuladen. Dazu sucht euch einen geeigneten Mirror aus der Liste auf https://archlinux.org/download/ aus und ladet die Imagedatei archlinux-{datum}-x86_64.iso herunter. Zur Sicherheit solltet ihr die Imagedatei noch verifizieren (siehe auch Software-Signaturen verifizieren).

Image auf USB-Stick kopieren

Steckt euren USB-Stick in euren Rechner und ermittelt, z.B. mittels dem Befehl lsblk, die Geräte-ID eures USB-Sticks. Anschließend kopiert das heruntergeladene sowie verifizierte Image mit folgendem Befehl auf euren USB-Stick:

dd if=archlinux-{datum}-x86_64.iso of=/dev/{deviceId} bs=4096

Terminal / Konsole

Eigene Secure Boot Keys erzeugen

Falls noch nicht geschehen, solltet ihr vor der Installation euch eure eigenen Secure Boot Keys erzeugen. Auf diesen Schritt gehe ich in diesem Beitrag aber nicht näher ein.
Details siehe Arch-Linux-Wiki: Secure Boot Keys erzeugen

Arch-Linux-Grundsystem installieren

USB-Stick booten und Installation starten

Startet euren Rechner mit eingestecktem USB-Stick neu und bootet diesen im UEFI-Bootmodus. Startet die Installation und ihr gelangt in die Live-USB-Kommandozeile von Arch Linux. Zuallererst bietet es sich an, das Tastatur-Layout auf Deutsch umzustellen:

loadkeys de-latin1

Terminal / Konsole

Stellt nun sicher, dass ihr den USB-Stick wirklich im UEFI-Bootmodus gebootet habt. Dazu prüft, ob es das Verzeichnis /sys/firmware/efi/efivars gibt und Dateien enthalten sind. Weiterhin stellt sicher, dass euer Rechner über eine aktive Internetverbindung verfügt, z.B. mittels ping archlinux.org.

Hinweis Internetverbindung herstellen

Ich selbst verwende zur Installation immer eine Ethernet-Verbindung. Falls das für euch keine Option ist, könnt ihr euch natürlich auch per WLAN mit eurem Router verbinden.
Details siehe Arch-Linux-Wiki - Installation guide - Connect to the internet.

Bevor es dann richtig mit der Installation losgeht, solltet ihr außerdem noch sicherstellen, dass die Systemzeit korrekt eingestellt ist:

timedatectl set-ntp true

Terminal / Konsole

Partitionen erstellen

Ziel der folgenden Partionierung ist es, eine EFI-System-Partition sowie eine Root-Partition zu erstellen. Die EFI-Partition wird unverschlüsselt bleiben und die mit euren eigenen Secure Boot Keys signierten EFI-Boot-Dateien enthalten. Die Root-Partition hingegen wird vollumfänglich mittels LUKS verschlüsselt werden.

Ermittelt nun, z.B. wieder mit lsblk, die Geräte-ID eurer zu partionierenden Festplatte. Anschließend ruft das Partionierungsprogramm parted und folgende dazugehörige Befehle auf:

parted /dev/{deviceId}(parted) mklabel gpt(parted) mkpart "efi" fat32 1MiB 2GiB(parted) set 1 esp on(parted) mkpart "root" ext4 2GiB 100%(parted) unit GiB print freeModell: Virtio Blockorientiertes Gerät (virtblk)Festplatte /dev/vda: 20,0GiBSektorgröße (logisch/physisch): 512B/512BPartitionstabelle: gptDisk-Flags:Nummer Anfang Ende Größe Dateisystem Name Flags 0,00GiB 0,00GiB 0,00GiB Freier Platz 1 0,00GiB 2,00GiB 2,00GiB fat32 efi boot, esp 2 2,00GiB 20,0GiB 18,0GiB ext4 root 20,0GiB 20,0GiB 0,00GiB Freier Platz(parted) quit

Terminal / Konsole

Im konkreten Fall habt ihr nun eine EFI-Partition vom Typ FAT32 mit 2GB und eine Root-Partition vom Typ ext4 mit dem restlichen freien Speicher erzeugt.

LUKS-Verschlüsselung und LVM einrichten

Ziel des jetziges Schritts ist es, die Root-Partition mit LUKS zu verschlüsseln und innerhalb der verschlüsselten Root-Partition ein LVM einzurichten.

Mithilfe von cryptsetup verschlüsseln wir und öffnen anschließend direkt die verschlüsselte Root-Partition (deviceId ist die Geräte-ID der Root-Partition):

cryptsetup luksFormat --verbose --verify-passphrase --type luks2 --cipher aes-xts-plain64 --key-size 512 --hash sha512 --label rootcrypt /dev/{deviceId}cryptsetup open /dev/disk/by-label/rootcrypt rootlvm

Terminal / Konsole

Hinweis LUKS-Version beachten

Ich verwende an dieser Stelle die Version 2 von LUKS. Falls ihr euch später dazu entschließen solltet, von systemd-boot auf GRUB als Bootloader zu wechseln, beachtet bittet, dass GRUB ggf. LUKS2 (noch) nicht vollumfänglich unterstützt. Im Zweifel könnt ihr an dieser Stelle sonst auch LUKS Version 1 verwenden.

Als nächstes richten wir LVM ein mit entsprechenden Logical Volumes ein. Größe, Bezeichnung und Anzahl der Logical Volumes könnt ihr individuell festlegen. In diesem Beispiel erzeuge ich nur ein "root"-, "swap"- und "home"-Volume (die Größen der Volumes in diesem Beispiel sind so klein, weil ich nur eine virtuelle 20GB-Festplatte innerhalb einer VM zum Testen verwende).

pvcreate /dev/mapper/rootlvmvgcreate lvmvg /dev/mapper/rootlvmlvcreate -L 12G lvmvg -n rootlvcreate -L 2G lvmvg -n swaplvcreate -l 100%FREE lvmvg -n home

Terminal / Konsole

Partitionen bzw. Logical Volumes formatieren

Nachdem wir unsere dynamischen Partitionen (die Logical Volumes) angelegt haben, können wir sie nun wie normale Partitionen formatieren:

mkfs.fat -F32 -n efi /dev/{efiDeviceId}mkfs.ext4 -L root /dev/lvmvg/rootmkfs.ext4 -L home /dev/lvmvg/homemkswap -L swap /dev/lvmvg/swap

Terminal / Konsole

chroot einrichten & Grundsystem installieren

Im nächsten Schritt richten wir eine chroot-Umgebung ein. Dazu sind die soeben erzeugten Partionen innerhalb /mnt wie folgt einzuhängen:

mount /dev/lvmvg/root /mntmkdir /mnt/efimkdir /mnt/homemount /dev/disk/by-label/efi /mnt/efimount /dev/lvmvg/home /mnt/homeswapon /dev/lvmvg/swap

Terminal / Konsole

Bevor nun das Grundsystem von Arch Linux unter /mnt installiert wird, überprüft ggf. noch einmal die Mirror-Liste unter /etc/pacman.d/mirrorlist, ob die Mirrors für euch ok sind und passt sie ggf. an (siehe auch Arch-Mirror-Status-Liste). Die Installation von Arch Linux bzw. die des Grundsystems erfolgt dann anschließend mit folgendem Befehl:

pacstrap /mnt base linux linux-firmware intel-ucode lvm2 sudo ufw apparmor networkmanager binutils efitools sbsigntools nano

Terminal / Konsole

Bei Bedarf könnt ihr auch direkt weitere Pakete angeben, die gleich mitinstalliert werden sollen. Ich selbst installiere an dieser Stelle aber erst einmal nur die, die ich für die eigentliche Installation und die danach folgende Grundkonfiguration benötige. Beachtet auch, dass ihr anstatt intel-ucode das entsprechende AMD--Microcode-Paket installiert, falls ihr eine AMD-CPU in eurem Rechner habt.

Nachdem alle Pakete installiert sind, könnt ihr die fstab-Dateisystem-Konfigurationsdatei generieren.

genfstab -U /mnt >> /mnt/etc/fstab

Terminal / Konsole

Abschließend wechseln wir in die chroot-Umgebung:

arch-chroot /mnt

Terminal / Konsole

Grundkonfiguration vornehmen

Innerhalb der chroot-Umgebung passen wir erst einmal die Zeit, Sprach- und Hosteinstellungen an. Öffnet als erstes die Datei /etc/locale.gen und löscht die Kommentar-Raute vor dem Eintrag de_DE.UTF-8. Nun führt ihr folgende Befehle aus:

ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtimehwclock --systohlocale-genecho LANG=de_DE.UTF-8 > /etc/locale.confecho KEYMAP=de-latin1-nodeadkeys > /etc/vconsole.conf

Terminal / Konsole

Für die Host-Einstellungen konfiguriert den Namen für euren Rechner:

echo MeinRechner > /etc/hostname

Terminal / Konsole

Daraufhin fügt folgende Zeilen in die /etc/hosts:

127.0.0.1 localhost127.0.1.1 MeinRechner

Datei: /etc/hosts (chroot-Umgebung)

Als letztes ist nun noch die /etc/mkinitcpio.conf anzupassen, so dass die HOOKS-Zeile wie folgt aussehen sollte:

HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck)

Datei: /etc/hosts (chroot-Umgebung)

Jetzt muss nur noch das initramfs-Image neu erstellt werden, wozu folgender Befehl dient:

mkinitcpio -P

Terminal / Konsole

Bootloader (systemd-boot) & Secure Boot einrichten

Zum erfolgreichen Booten unseres neuen Arch-Linux-Systems fehlt nun noch der Bootloader. Weiterhin müssen die EFI-Boot-Dateien noch mit euren eigenen Secure Boot Keys signiert und auf die EFI-System-Partition kopiert werden. Bdedenkt zudem, dass das Signieren und Kopieren nach jeder Bootloader-, Kernel, initramfs bzw. Microcode-Aktualisierung von Nöten ist. An dieser Stelle kommt das von mir entwickelte secbootctl zum Einsatz, dass den ganzen Vorgang komfortabler und einfacher macht.

Installiert secbootctl entsprechend der Anleitung auf der GitHub-Projektseite. Kopiert dann eure Secure Boot Keys - genauer gesagt die db.key und db.crt - in das Verzeichnis /etc/secbootctl/keys. Legt zudem die Datei /etc/kernel/cmdline mit folgendem Inhalt an:

cryptdevice=LABEL=rootcrypt:rootlvm root=LABEL=root rw quiet lsm=landlock,lockdown,yama,apparmor,bpf

Datei: /etc/kernel/cmdline (chroot-Umgebung)

Dann führt die nachfolgenden Befehle aus, um systemd-boot auf der EFI-System-Partition zu installieren als auch die EFI-Boot-Dateien zu signieren und auf die EFI-Partition zu kopieren:

secbooctl bootloader:installsecbooctl kernel:installsecbooctl bootloader:update-menusecbooctl pmi:install

Terminal / Konsole

Falls ihr in eurer UEFI-Firmware noch nicht eure Secure Boot Keys hinterlegt habt, kopiert eure Public-Keys bzw. Zertifikate temporär nach /efi/keys.

Root- und Standard-Benutzer anlegen

Quasi der letzte Schritt bevor ihr in euer neues Arch-Linux-System booten könnt, ist das Anlegen eines Root- sowie normalen Standard-Benutzers. Den Root-Benutzer gibt es im Prinzip schon, denn mit dem sind wir ja gerade in der chroot-Umgebung angemeldet. Vergebt nun mittels passwd ein Root-Passwort. Danach erstellt einen neuen Benutzer für euren täglichen Gebrauch:

useradd --create-home mynamepasswd mynamegpasswd --add myname admgroupadd sudogpasswd --add myname sudo

Terminal / Konsole

Nun noch die /etc/sudoers so anpassen, dass Benutezr der Gruppe sudo Befehle mit Root-Rechten ausführen dürfen. Dazu löscht die Kommentar-Raute vor der folgenden Zeile:

%sudo ALL=(ALL) ALL

Datei: /etc/sudoers (chroot-Umgebung)

Installation fertigstellen

Um die Installation abzuschließen, meldet euch aus der chroot-Umgebung ab, hängt die chroot-Mounts aus und startet euren Rechner neu (wechselt direkt ins BIOS - USB-Stick abziehen nicht vergessen):

exitumount -R /mntreboot

Terminal / Konsole

Bevor ihr das neue Arch-Linux-System bootet, hinterlegt in eurem BIOS eure Secure Boot Keys, aktiviert Secure Boot und startet den Rechner neu. Wenn alles geklappt hat und Arch Linux erfolgreich gebootet wurde, landet ihr auf der Kommandozeile mit Login-Abfrage. Meldet euch nun mit eurem Standard-Benutzer an.

Hinweis Zugriff auf BIOS mit Passwort schützen

Damit ein "Angreifer" nicht einfach Secure Boot über das BIOS-Menü deaktivieren kann, solltet ihr den Zugriff auf das BIOS per Passwort schützen.

(Grund-)Konfiguration nach Installation

Root-Benutzer deaktivieren

Ich selbst verwende nie den Root-Benutzer und deaktiviere ihn deshalb bei mir mittels:

sudo passwd --lock root

Terminal / Konsole

Firewall, AppArmor & Netzwerk einrichten & aktivieren

ufw-Firewall, AppArmor und Network-Manager lassen sich wie folgt aktivieren:

sudo systemctl enable ufwsudo ufw enablesudo systemctl enable NetworkManager.servicesudo systemctl start NetworkManager.servicesudo systemctl enable apparmor.servicesudo systemctl start apparmor.service

Terminal / Konsole

Startet euren Rechner neu und vergewissert euch mittels sudo aa-enabled , dass AppArmor läuft. Seit ihr per Ethernet mit eurem Router verbunden, sollte ihr nun auch Zugriff aufs Internet haben.

Zusätzliche Software bzw. Pakete installieren & einrichten

An dieser Stelle ist es euch überlassen, welche zusätzlichen Pakete ihr noch benötigt und installiert. Empfehlenswert ist natürlich erst einmal eine Desktop-Umgebung, wie z.B. Xfce, Gnome oder KDE, zu installieren.

Zusätzliche Sicherheits-Tipps

Im Folgenden noch einige "Hardening"-Tipps, die ich bei mir noch umgesetzt habe (siehe auch Arch-Linux-Wiki: Security).

fstab anpassen

Für einige Partitionen, wie z.B. "home", setze ich bspw. noch alle oder einige von diesen Dateisystem-Optionen:

  • nodev
  • noexec
  • nosuid

VM-Ausführung absichern

Meine QEMU/ KVM-VMs, die ich mit Virtual Machine Manager (VMM) verwalte, führe ich immer ohne Root-Rechte und mit Absicherung durch AppArmor aus:

  • Arch Linux: libvirt mit AppArmor-Unterstützung installieren

Xorg ohne Root-Rechte ausführen

Für den Fall, dass man nicht Wayland, sondern Xorg (X11) als Display-Server verwendet, sollte man darauf achten, das Xorg ohne Root ausgeführt wird.

Unterstützung für "Unprivileged User Namespaces" deaktivieren

Unter anderen Distributionen, wie z.B. Debian, ist die Kernel-Unterstützung für "unprivileged user namespaces" aus Sicherheitsgründen deaktiviert. Ich habe es bei mir auch deaktiviert, indem ich eine Datei namens 99-disable-unprivileged-userns.conf im Verzeichnis /etc/sysctl.d mit folgendem Inhalt angelegt habe:

kernel.unprivileged_userns_clone=0

Datei: /etc/sysctl.d/99-disable-unprivileged-userns.conf

Fazit

Die Installation von Arch Linux ist im Vergleich zu anderen Distributionen etwas aufwendiger und auch nicht unbedingt für Linux-Neulinge geeignet. Mir persönlich liegt der Do-it-youself-Ansatz aber, weil ich mein System genau nach meinen Vorstellungen konfigurieren kann und im Bezug auf die Software immer auf dem neuesten Stand bin. Grundsätzlich kann man die ganzen sicherheitsrelevanten Aspekte, wie Festplatten-Verschlüsselung, AppArmor und UEFI Secure Boot mit eigenen Keys, aber auch mit anderen Distributionen, wie z.B. Debian oder Ubuntu, umsetzen (secbootctl funktioniert bspw. auch ohne Probleme unter Debian und Ubuntu).

FAQs

How do I reset my Secure Boot key in BIOS? ›

Resetting all Secure Boot certificate keys to platform defaults
  1. From the System Utilities screen, select System Configuration > BIOS/Platform Configuration (RBSU) > Server Security > Secure Boot Settings > Advanced Secure Boot Options > Reset all keys to platform defaults.
  2. Click Yes.

Does Linux support Secure Boot in UEFI? ›

The company added the Linux Secure Boot feature in Windows 10 and Windows Server 2016. Administrators can use a Linux operating system configured as Generation 2 VM on Windows Hyper-V as long as the distribution's boot loader has a digital signature that corresponds with the one in the UEFI firmware.

Does Arch Linux support UEFI? ›

The Arch Linux installation medium has shellx64. efi at the root of the volume. rEFInd and systemd-boot will automatically add a boot menu entry for the UEFI shell if shellx64. efi is in the root of the EFI system partition.

How do I enable Secure Boot easily? ›

From the System Utilities screen, select System Configuration > BIOS/Platform Configuration (RBSU) > Server Security > Secure Boot Settings > Secure Boot Enforcement and press Enter. Select a setting and press Enter: Enabled — Enables Secure Boot.

How fix Arch Linux not booting? ›

If you usually boot into a GUI and that is failing, perhaps you can press Ctrl+Alt+F1 through Ctrl+Alt+F6 and get to a working tty to run pacman through. If the system is broken enough that you are unable to run pacman, boot using a monthly Arch ISO from a USB flash drive, an optical disc or a network with PXE.

What happens if I erase all Secure Boot settings? ›

After you delete all keys, the system is forced to immediately disable Secure Boot. Secure Boot remains disabled upon system reboot until valid secure boot keys are restored.

What happens when you reset BIOS security to factory default? ›

Resetting your BIOS restores it to the last saved configuration, so the procedure can also be used to revert your system after making other changes. Whatever situation you may be dealing with, remember that resetting your BIOS is a simple procedure for new and experienced users alike.

What happens if you restore Secure Boot to factory settings? ›

An OS can write UEFI variables that store such things as entries in the boot order and key database information for Secure Boot. When you Restore Default Manufacturing Settings, this information is cleared, whereas it is retained when you Restore Default System Settings.

Should UEFI boot mode Secure Boot be on or off? ›

On some devices, you must first reboot once after enabling UEFI and return to the settings menu in order to enable Secure Boot. It is recommended, but not required, to enable the TPM and virtualization support options as well, in order to enable other security features used by Windows.

How do I fix boot mode is set to UEFI Secure Boot on? ›

Steps are provided below:
  1. Boot mode should be selected as UEFI (Not Legacy).
  2. Secure Boot set to Off. ...
  3. Go to the 'Boot' tab in the BIOS and select Add Boot option. ( ...
  4. A new window will appear with 'blank' boot option name. ( ...
  5. Name it "CD/DVD/CD-RW Drive" ...
  6. Press F10 key to save settings and restart.
  7. The computer will restart.
Dec 20, 2022

Should I enable UEFI Secure Boot? ›

Why You Should Use Secure Boot. Secure Boot is a valuable security feature that can help to protect your system from malware. By only allowing signed software to run, you can ensure that the software you are running is from a trusted source and has not been tampered with.

Does Arch Linux work with Secure Boot? ›

All pre-installed Windows 8/8.1, 10 and 11 systems by default boot in UEFI/GPT mode and have UEFI Secure Boot enabled by default. This is mandated by Microsoft for all OEM pre-installed systems. Arch Linux install media does not support Secure Boot yet. See Secure Boot#Booting an installation medium.

Can I enable Secure Boot after installing Linux? ›

Secure Boot must be enabled before an operating system is installed. If an operating system was installed while Secure Boot was disabled, it will not support Secure Boot and a new installation is required. Secure Boot requires a recent version of UEFI.

How do I know if my Arch Linux is UEFI? ›

The easiest way to find out if you are running UEFI or BIOS is to look for a folder /sys/firmware/efi. The folder will be missing if your system is using BIOS. Alternative: The other method is to install a package called efibootmgr. If your system supports UEFI, it will output different variables.

How do I enable SSH Arch? ›

  1. install Arch onto an USB stick/harddisk (you can do this from the live cd)
  2. in the new installation. set a root password ( passwd ) allow ssh root login ( vi /etc/ssh/sshd_config and append PermitRootLogin yes ) enable sshd ( systemctl enable sshd ) ...
  3. boot the new machine from the usb device.
Mar 17, 2017

Top Articles
Latest Posts
Article information

Author: Fr. Dewey Fisher

Last Updated: 26/03/2023

Views: 5869

Rating: 4.1 / 5 (62 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Fr. Dewey Fisher

Birthday: 1993-03-26

Address: 917 Hyun Views, Rogahnmouth, KY 91013-8827

Phone: +5938540192553

Job: Administration Developer

Hobby: Embroidery, Horseback riding, Juggling, Urban exploration, Skiing, Cycling, Handball

Introduction: My name is Fr. Dewey Fisher, I am a powerful, open, faithful, combative, spotless, faithful, fair person who loves writing and wants to share my knowledge and understanding with you.