Dies ist die archivierte Version des Blogs vom 05.01.2017. Aktuelle Beiträge findest du unter thomas-leister.de
 

Gestern habe ich die Arch Linux Installation auf meinem Asus UX31a Ultrabook erneuert. Eine Schwierigkeit bei dem Ultrabook ist dabei das UEFI System. Mein vorheriges Arch Linux Setup auf dem Gerät war ziemlich kompliziert (wie sich herausgestellt hat: unnötig kompliziert), aber inzwischen habe ich einfachere Wege gefunden, die ich mit diesem Beitrag mit euch teilen will. Das UEFI Setup ist gar nicht mehr so schwierig, wenn man die richtige herangehensweise gefunden hat. Statt 4 Partitionen werden nur noch 2 benötigt und das Setup ist wesentlich kompakter. Der Großteil des Betriebssytems (alles außer /boot) wird via LUKS verschlüsselt auf der SSD abgelegt.

Zuerst sollte man die Festspeichereinteilung verinnerlichen. Die SSD wird in zwei Partitionen geteilt. Die erste Partition (EFI System Partition – ESP) wird vom UEFI benutzt und muss zwingend angelegt werden. Sie wird als FAT32-Dateisystem formatiert und als ESP markiert. Außerdem werden auf der ESP der EFI Bootmanager und der Linux Kernel mit allen relevanten Boot-Dateien abgelegt. Die zweite Partition ist unsere Nutzdatenpartition. Sie wird mit LUKS verschlüsselt und enthält einen LVM-Container, der wiederum eine virtuelle Root-Partition und eine SWAP-Partition für den Auslagerungsspeicher enthält. Während des Bootvorgangs wird die verschlüsselte LUKS-Partition mit einer Passphrase entschlüsselt.

Für den UEFI-Start soll der UEFI-Bootmanager „Gummiboot“ genutzt werden. Er liegt auf der ESP und wird beim Start von der Firmware des Mainboard aufgerufen. Gummiboot wiederum gibt dem Mainboard die Anweisung, den Linux Kernel direkt via EFISTUB zu starten. Theoretisch könnte man bei einer ausgereiften UEFI Firmware auf dem Mainboard auch auf Gummiboot verzichten und den Linux Kernel direkt via EFISTUB starten, doch das ist nicht auf allen System ohne Hindernisse machbar: Viele Manboards implementieren UEFI nur teilweise und sind in den Konfigurationsmöglichkeiten deutlich eingeschränkt. In meinem Fall hätte ich keine Möglichkeit, dem Kernel zusätzliche Bootparameter zu übergeben, weil die UEFI Firmware meines Asus UX31a das nicht vorsieht. Man kann nur sehr, sehr grundlegende Starteinträge in der UEFI Oberfläche anlegen. Wenn der EFI-Manager der Mainboard-Firmware nichts taugt, nutzt man eben einen externen Bootmanager, der die Starteinträge verwaltet. In diesem Fall Gummiboot. Es ermöglicht und eine sehr einfache Konfiguration, die Nutzung von Startparametern beim Linux Boot und beschleunigt des Booten im Vergleich zur Nutzung eines Bootloaders wie z.B. GRUB deutlich.

Beim Start passiert also folgendes: Das UEFI sucht in der ESP nach einer ausführbaren Startdatei, findet Gummiboot, erhält von Gummiboot die Anweisung, den Linux-Kernel mit bestimmten Parametern zu starten und führt diese Anweisung dann aus. Und schon startet Linux wie gewohnt.

Arch Linux Image herunterladen und auf USB Stick kopieren

Ladet euch das aktuelle Arch ISO auf der Downloadseite herunter und kopiert es mit folgendem Befehl auf einen freien USB-Stick:

sudo dd if=arch-linux-2015-05-22.iso of=/dev/sdb

Bei „if“ wird der Pfad zum ISO angegeben, bei „of“ der Pfad zur Gerätedatei eures USB-Sticks. Wie die passende Gerätedatei heißt, könnt ihr über über den Befehl „lsblk“ erfahren. Vorsicht: Stellt sicher, dass ihr tatsächlich das richtige Gerät beschreibt, und nicht eure interne Festplatte!

Startet den Rechner, auf dem ihr Arch Linux installieren wollt, in die UEFI Oberfläche und stellt sie so ein, dass vom eingesteckten USB-Stick gebootet wird. Wenn ich schon mal im UEFI Management seid: Schaltet „Secure Boot“ aus. Bleibt es aktiv, startet Linux nicht. Beim nächsten Neustart sollte Arch Linux booten und ihr seht die Rootkonsole vor euch.

Bevor es losgeht …

… müssen noch ein paar Dinge eingerichtet werden. Zuerst wird das Tastaturlayout auf Deutsch umgestellt:

loadkeys de-latin1-nodeadkeys

Bei der Eingabe des Befehls ist zunächst noch das englische Tastaturlayout aktiv. „z“ und „y“ sind also vertauscht. Den Bindestrich erzeugt ihr mit einem Druck auf die „ß“ Taste.

Damit wir später LUKS nutzen können, welches dm-crypt nutzt, muss noch ein Modul in den Kernel geladen werden:

modprobe dm-crypt

Als nächstes ist die Internetverbindung dran, denn sie ist für die Installation unverzichtbar. Falls ihr eine LAN-Verbindung nutzen wollt, steckt das Kabel an und lest den Schnittstellenbezeichner für euren Netzwerkadapter aus:

ip link

Bei mir trägt die Schnittstelle beispielsweise den Bezeichner eth8s0. Holt euch dann vom Router eine IP-Adresse:

dhcpcd eth8s0

Mit einem „ping 8.8.8.8“ könnt ihr eure Verbindung überprüfen.

Wer lieber eine WLAN-Verbindung nutzt, kann seine Verbindung über das Kommando

wifi-menu

herstellen. Dabei wird das passende Netzwerk ausgesucht, die Passphrase eingegeben und dann bestätigt. Die Verbindung wird automatisch hergestellt. Auch das lässt sich mit „ping 8.8.8.8“ überprüfen.

Partitionierung

In meinem Fall ist /dev/sda die intern verbaute SSD des Rechners. Welchen Bezeichner euer Festspeicher hat, könnt über „lsblk“ erfahren. In den meisten Fällen ist es /dev/sda.

Für die Partitionierung nutzen wir das Tool gdisk, welches die GPT-Version von fdisk ist. UEFI benötigt nämlich eine GPT (GUID Partition Table).

gdisk /dev/sda
  • Alle Partitionen auf der Festplatte werden gelöscht: „o“
  • Neue Partition anlegen: „n“
  • Als erste Partition festlegen: „1“
  • Ersten Sektor auf 2048 setzen: [ENTER]
  • Letzten Sektor setzen / auf 512 MB Partitionsgröße setzen: „+512M“
  • „ef00“ als Partitionstyp wählen: „ef00“

Es folgt die Hauptpartition für die Nutzdaten:

  • Neue Partition anlegen: „n“
  • Als zweite Partition festlegen: „2“
  • Ersten Sektor wählen: [ENTER]
  • Letzten Sektor wählen: [ENTER]
  • Partitionstyp wählen: [ENTER]

Mit „w“ werden die Änderungen auf die SSD geschrieben. Der Vorgang muss mit „Y“ bestätigt werden.

LUKS Verschlüsselung einrichten

Die zweite, größere Partition (/dev/sda2) wird nun mit LUKS verschlüsselt. Dazu können verschiedene Algorithmen und Schlüssellängen gewählt werden. Welche Algorithmen auf dem System am schnellsten funktionieren, kann man mit einem Benchmark ermitteln:

cryptsetup benchmark

Ich habe mich für AES-XTS-PLAIN mit 512 Bit entschieden. Das reicht locker aus. Verschlüsselung von /dev/sda2:

cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda2
  • „YES“ eingeben
  • Gewünschte Passphrase zur Verschlüsselung eingeben
  • Passphrase wiederholen

Die Partition ist nun verschlüsselt.

LVM Container anlegen

Um nun LVM mit den virtuellen Partitionen dort ablegen zu können, muss sie entschlüsselt und als Gerät gemountet werden:

cryptsetup luksOpen /dev/sda2 lvm

(Passphrase eingeben)

In den nächsten Schritten wird ein LVM Container „main“ erstellt und dahin die beiden virtuellen Partitionen „root“ und „swap“:

LVM für die verschlüsselte Partition aktivieren:

pvcreate /dev/mapper/lvm

Neue Volume Group „main“ erstellen:

vgcreate main /dev/mapper/lvm

Die Größe der SWAP-Partition sollte sich nach der Größe des RAMs richten. Mein Ultrabook hat 4 GB Ram, also muss auch meine SWAP-Partition 4 GB groß sein, wenn ich „Suspend to Disk“ nutzen will. SWAP-Partition erstellen:

lvcreate -L 4G -n swap main

Der übrige Platz soll von der virtuellen root-Partition genutzt werden:

lvcreate -l 100%FREE -n root main

Nun müssen die neuen, virtuellen LVM Partitionen „root“ und „swap“ mit Dateisystemen beschrieben werden. Swap bekommt das SWAP-Dateisystem:

mkswap /dev/mapper/main-swap

… und „root“ das Standard-EXT4 Dateisystem:

mkfs.ext4 /dev/mapper/main-root

Partitionen einbinden

Alle vorhandenen Partitionen werden jetzt an der richtigen Stelle eingebunden:

Root Partition:

mount /dev/mapper/main-root /mnt

ESP:

mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

SWAP wird eingeschaltet:

swapon /dev/mapper/main-swap

Basissystem installieren

Pacman konfigurieren

Der Paketmanager Pacman kommt mit einer langen Liste an verfügbaren Mirror-Servern für die Arch Repositories. Die Liste sollte auf Server in der Nähe bzw. innerhalb des Landes reduziert werden, in dem man sich befindet. In meinem Fall also Server mit dem Standort Deutschland. Von der Liste der verfügbaren Server wird eine Kopie angelegt und die Liste dann bearbeitet:

cp /etc/pacman.d/mirrorlist /etc/pacman/mirrorlist.bak
nano /etc/pacman.d/mirrorlist

Je niedriger der „score“, desto besser ist der Server erreichbar. Ganze Zeilen lassen sich im nano-Editor mit STRG + K löschen. 3 Server in der Liste sollten ausreichen. Speichert die Datei nach euren Änderungen ab.

Basissystem mit Pacman installieren

Nun wird die Arch Linux Basis installiert:

pacstrap /mnt/ base base-devel

Wer eine WLAN-verbindung am Rechner nutzt, sollte neben „base“ und „base-devel“ auch „wpa_supplicant“ und „dialog“ installieren, sodass das neu installierte System direkt eine Internetverbindung für weitere Paketinstallationen herstellen kann. Der Installationsvorgang kann je nach Internetverbindung und Leistung des Rechners einige Minuten dauern.

Nach der Installation wird die wichtige Datei „etc/fstab“ erzeugt. In ihr wird festgelegt, welche Partitionen mit welchen Optionen beim Linux Start zu mounten sind:

genfstab -p /mnt > /mnt/etc/fstab

Wenn der Vorgang erfolgreich war, sollten in der Datei /mnt/etc/fstab drei Einträge für die drei Partitionen zu sehen sein.

Arch Linux konfigurieren

Nachdem die Basis installiert wurde, geht es an die Konfiguration von Sprache, Zeitzone und vielem mehr. Dazu wird in das neue Arch System „gechrootet“:

arch-chroot /mnt/

Hostnamen setzen:

echo meinrechner > /etc/hostname

Spracheinstellung festlegen

echo LANG=de_DE.UTF-8 > /etc/locale.conf

Tastaturbelegung festlegen:

echo KEYMAP=de-latin1 > /etc/vconsole.conf

Zeitzone festlegen:

ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Locale.gen konfigurieren:

nano /etc/locale.gen

Vor diesen Einträgen „#“ entfernen:

#de_DE.UTF-8 UTF-8
#de_DE ISO-8859-1
#de_DE@euro ISO-8859-15

Locale generieren:

locale-gen

Root Passwort setzen:

passwd

Linux Kernel erzeugen

Damit die LUKS-Verschlüsselung beim Linux-Start erkannt und verarbeitet werden kann, müssen noch ein paar „Hooks“ zur Datei „/etc/mkinitcpio.conf“ hinzugefügt werden. Der Eintrag „HOOKS=“ sollte so aussehen:

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

Die Reihenfolge der Module spielt eine bedeutende Rolle und sollte wie angegeben übernommen werden.

Linux Kernel erzeugen:

mkinitcpio -p linux

Gummiboot Bootmanager installieren und konfigurieren

Installation aus den Arch Repositories:

pacman -S gummiboot

Gummiboot Dateien nach /boot (ESP) installieren:

gummiboot --path=/boot install

Die Gummiboot-Konfiguration in /boot/loader/loader.conf sollte wie folgt abgeändert werden:

# timeout 0
default arch

„timeout“ (hier auskommentiert) gibt die Zeit an, wie lange eine Auswahl zwischen verschiedenen Starteinträgen beim Boot möglich sein kann. Wird die Einstellung auf Null gesetzt (oder auskommentiert) wird beim rechnerstart keine Auswahl eingeblendet. Falls man trotzdem einmal einen anderen Starteintrag wählen will, oder Bootparameter ändern will, kann man das Gummiboot-Menü durch dauerhaftes Drücken der SPACE-Taste beim Start einblenden. „default“ legt den Haupteintrag fest (hier „arch“ genannt)

Für den „arch“ Starteintrag wird eine passende Konfigurationsdatei angelegt:

nano /boot/loader/entries/arch.conf

Die Datei muss dabei denselben Namen tragen wie der Bezeichner in /boot/loader/loader.conf + Endung „.conf“. Inhalt der Datei:

title    Arch Linux
linux    /vmlinuz-linux
initrd   /initramfs-linux.img
options  cryptdevice=/dev/sda2:main root=/dev/mapper/main-root resume=/dev/mapper/main-swap lang=de locale=de_DE.UTF-8

Unter „options“ werden die Standard-Bootparameter angegeben, die beim Start von Linux genutzt werden sollen. Wenn z.B. wegen eines Grafikproblems kurzfristig andere Bootparameter für den Stadt genutzt werden sollen, kann man beim Hochfahren des Rechners die Leertaste („SPACE“) drücken, den jeweiligen Eintrag auswählen und die Bootparameter temporär durch Drücken der Taste „e“ ändern.

Fertig!

Die Installation und grundlegende Konfiguration von Arch Linux ist abgeschlossen. War doch gar nicht schwierig, oder? Die Chroot-Umgebung wird verlassen:

exit

… und die Partitionen ausgebunden:

umount /mnt/boot
umount /mnt

Mit einem „reboot“ wird der Rechner neu gestartet. Vergesst nicht, den USB Stick zu ziehen ;)

Bei Start werdet ihr nach dem Passwort für die LUKS-Verschlüsselung gefragt. Nach der Verschlüsselung könnt ihr euch dann über den Benutzernamen „root“ + selbst gewähltes Root-Passwort einloggen und alle weiteren Einrichtungsschritte in der offiziellen, deutschsprachigen Arch Linux Anleitung befolgen (weiter geht es bei „Einen Benutzer hinzufügen und Gruppen wählen“): https://wiki.archlinux.de/title/Anleitung_f%C3%BCr_Einsteiger#Einen_Benutzer_hinzuf.C3.BCgen_und_Gruppen_w.C3.A4hlen

Wenn ihr euer Passwort für LUKS ändern wollt, könnt ihr hier weiterlesen (mit /dev/sda2 statt /dev/sda3): https://legacy.thomas-leister.de/arch-linux/luks-verschluesselung-passwort-aendern/


Post published on 22. Mai 2015 | Last updated on 22. Mai 2015
Tags:               

Diesen Blog unterstützen

Wenn Dir der Beitrag gefallen hat, freue ich mich über einen kleinen Obolus :-) Bitcoin QR Code

PayPal-Seite: https://www.paypal.me/ThomasLeister
Meine Bitcoin-Adresse: 15z8 QkNi dHsx q9WW d8nx W9XU hsdf Qe5B 4s

Siehe auch: Unterstützung

Informationen zum Autor

Thomas Leister

Geb. 1995, Kurzhaar-Metaller, Geek und Blogger. Nutzt seit Anfang 2013 ausschließlich Linux auf Desktop und Servern. Student der Automobilinformatik an der Hochschule für angewandte Wissenschaften in Landshut.

8 thoughts on “Arch Linux mit LUKS Verschlüsselung auf UEFI System installieren

  • Merci, Guter Artikel.

    systemctl enable Großes_Lob
    systemctl start Großes_Lob

  • Dein Artikel gefällt mir sehr – klar ausgedrückt und einfach nachvollziehbar.

    Gruss TLW

  • So dürfte das eigentlich nicht funktioniert haben. Die Boot Partition ist nicht richtig formatiert (vfat), was zu einer fehlerhaften Installation von base führt.
    Daneben fehlt in der arch.conf bei options „rw“ (ohne Anführungsstriche).

    Die Verschlüsselung ist auch schwach, wenn vorher kein Entropie Harvester gestartet wurde. Da würde ich mich an deiner Stelle noch mal einlesen

  • Thomas (ein anderer)

    Ich habe mich an die Anleitung gehalten, aber die von dem anderen Thomas vorgeschlagenenen Änderungen befolgt. Damit war ich erfolgreich.

    Die Änderungen im einzelnen:

    1. Boot-Partition formatieren: mkfs.vfat -F32 /dev/sda1

    2. Konfiguration von gummiboot: options cryptdevice=/dev/sda2:main root=/dev/mapper/main-root resume=/dev/mapper/main-swap lang=de locale=en_US.UTF-8 rw

    3. Randomisierung nutzen: cryptsetup -c aes-xts-plain -y -s 512 –use-random luksFormat /dev/sda2

    Ich hatte Arch Linux schon auf einem USB-Stick, habe an der Liste der Mirrors nichts geändert, LAN benutzt und englische Tastatur etc. (siehe auch 2.) eingestellt. Es handelte sich um einen Dell XPS 13 (2015).

  • Danke für die Anleitung, habe sie mit den Änderungen in den Kommentaren erfolgreich angewendet. Gummiboot ist jetzt natürlich systemd-boot, das nicht extra installiert werden musste. Und statt „gummiboot“ verwendet man jetzt „bootclt“.

  • Ich bin leider mit der Installation nicht erfolgreich. Laut der Ausgabe hätte ich nicht genug Speicher „not enough free disk space“ beim Befehl: pacstrap /mnt base base-devel

  • Es fehlt die Anregung eines Dateisystems für /boot (muss.vfat). Ansonsten, vielen Dank!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.