Arch Linux mit lvm, dm-crypt und luks verschlüsselt installieren

Erstellt am 28.01.2019 (Update 16.1.2020)


Arch Linux Logo

Kurze Einführung in das Thema Verschlüsselung

Ein Arch Linux verschlüsselt zu installieren ist keine große Kunst. Ein paar Kleinigkeiten müssen bei der Installation beachtet werden und das Betriebssystem läuft rund.
Im folgenden Tutorial möchte ich euch zeigen, wie schnell das klappt. Als Desktop habe ich zusätzlich noch Gnome verwendet.

Bevor es jedoch losgeht, möchte ich kurz darauf eingehen, warum überhaupt ein System verschlüsselt sein sollte.

Die meisten Leute denken sich: „Ich habe nichts zu verbergen und auch keine Geheimnisse." Ich hoffe sie meinen dabei eher: „Ich glaube nicht, dass sich jemand die Mühe macht meine Daten nach Wertvollem zu durchsuchen.“ Leider ist das nicht immer so, deshalb gilt: Wichtige Daten richtig zu schützen. Der Artikel bezieht sich zu 100 % auf Arch Linux User. Windows und Mac OS Benutzern empfehle ich den Artikel vom BSI zur Verschlüsselung mit Betriebssystemen.

Installationsmedium erstellen


Iso-Image von http://www.archlinux.org/download/ herunterladen:

Image mit dd auf einen USB Stick kopieren:

dd if=archlinux.iso of=/dev/sdx

Arch Linux installieren


Vom Installationsmedium booten.

In der Konsole angekommen, deutsche Tastatur laden:

loadkeys de-latin1

Festplatte partitionieren (fdisk)


Zunächst eine 100 MB große Partition mit Boot-Flag (für die spätere Boot-Partition).

Den Rest verwenden wir für das verschlüsselte lvm.

Mit a macht ihr eine Partition bootfähig, m zeigt euch die Hilfe in fdisk. Folgendes Foto zeigt die Konfiguration bei mir:

Beispiel formatierte Festplatte fdisk

Verschlüsseltes lvm erstellen


Kernelmodul muss geladen werden:

root@archiso ~ # modprobe dm-crypt

Partition für das lvm wird verschlüsselt. Ich habe mich für eine aes 512 Verschlüsselung entschieden. Mit dem Befehl cryptsetup kann ein Test durchgeführt werden, was für euch sinnvoll ist:

root@archiso ~ # cryptsetup benchmark
root@archiso ~ # cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda2

Mit YES die Verschlüsselung bestätigen und ein sicheres Passwort vergeben:

root@archiso ~ # cryptsetup luksOpen /dev/sda2 lvm
               

Soll die SSD TRIM verweden, muss der Parameter --allow-discards angegeben sein

root@archiso ~ # pvcreate /dev/mapper/lvm
root@archiso ~ # vgcreate main /dev/mapper/lvm

### Swap entsprechend verbautem RAM anpassen ###

root@archiso ~ # lvcreate -L 8GB -n swap main
root@archiso ~ # lvcreate -l 100%FREE -n home main
                

Mit mkfs werden die Dateisysteme erstellt. Bei boot sollte die 64-Bit-Fähigkeit deaktiviert werden, da syslinux früher nur von 32-Bit booten konnte. Mittlerweile sollte syslinux auch mit 64-Bit umgehen können.

root@archiso ~ # mkfs.ext4 -L home /dev/mapper/main-home
root@archiso ~ # mkfs.ext4 -L boot -O '^64bit' /dev/sda1
root@archiso ~ # mkswap -L swap /dev/mapper/main-swap
                

Die Partitionen können gemountet werden:

root@archiso ~ # mount /dev/mapper/main-home /mnt
root@archiso ~ # mkdir /mnt/boot
root@archiso ~ # mount /dev/sda1 /mnt/boot
                

Basis Arch Linux und Bootloader installieren


Prüft die Internetverbindung - sollte keine bestehen sollte der Service dhcpcd Abhilfe schaffen:

root@archiso ~ # ping -c 5 google.de
root@archiso ~ # dhcpcd
                  

Basissystem und Bootloader installieren:

root@archiso ~ # pacstrap /mnt base base-devel syslinux nano linux linux-firmware mkinitcpio lvm2 dhcpcd
root@archiso ~ # syslinux-install_update -i -a -m -c /mnt
                  

Syslinux konfigurieren; Die APPEND Option muss in beiden (arch und archfallback) angepasst werden:

root@archiso ~ # syslinux-install_update -i -a -m -c /mnt
root@archiso ~ # nano /mnt/boot/syslinux/syslinux.cfg

APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-home rw lang=de locale=de_DE.UTF-8
                  

Systemkonfiguration


Swap-Partition aktivieren:

root@archiso ~ # swapon -L swap
                  

Anschließend die fstab generieren und kontrollieren:

root@archiso ~ # genfstab -U -p /mnt >> /mnt/etc/fstab
root@archiso ~ # nano /mnt/etc/fstab
                  

Bald geschafft - In die chroot Umgebung wechseln:

root@archiso ~ # arch-chroot /mnt
                  

Hostname, locale.conf, locale.gen bearbeiten und generieren

[root@archiso /]# echo LANG=de_DE.UTF-8 > /etc/locale.conf
[root@archiso /]# nano /etc/locale.gen
### Mit Strg + w suchen und # vor folgenden Zeilen entfernen ###
#de_DE.UTF-8 UTF-8
#de_DE ISO-8859-1
#de_DE@euro ISO-8859-15
[root@archiso /]# locale-gen
Generating locales...
de_DE.UTF-8... done
de_DE.ISO-8859-1... done
de_DE.ISO-8859-15@euro... done
Generation complete.
                  

Tastaturbelegung und Schriftart festlegen:

[root@archiso /]# echo KEYMAP=de-latin1 > /etc/vconsole.conf
[root@archiso /]# echo FONT=lat9w-16 >> /etc/vconsole.conf
                  

Noch die entsprechende Zeitzone festlegen:

[root@archiso /]# ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
                  

Und ein multilib Betriebssystem bauen. Entferne dazu aus der /etc/pacman.conf die # vor folgenden Zeilen:

[multilib]
SigLevel = PackageRequired TrustedOnly
require_once = /etc/pacman.d/mirrorlist

[root@archiso /]# pacman -Sy
                  

Die /etc/mkinitcpio.conf muss noch zwingend angepasst werden:

[root@archiso /]# nano /etc/mkinitcpio.conf

### MODULES und HOOKS Werte entsprechend anpassen ###
MODULES=(ext4)
HOOKS=(base udev autodetect modconf block keyboard keymap encrypt lvm2 filesystems fsck shutdown)
                  

Kernel-Image ertellen und Neustarten


Kernel-Image erstellen:

[root@archiso /]# mkinitcpio -p linux
                

Root-Passwort festlegen:

[root@archiso /]# passwd
                

Damit der Computer auch nach dem Neustart eine IP-Adresse automatisch bezieht, entsprechenden Dienst aktivieren:

[root@archiso /]# systemctl enable dhcpcd.service
                

Chroot verlassen, Partitionen aushängen und neustarten:

[root@archiso /]# exit
root@archiso ~ # umount /mnt/{boot,}
root@archiso ~ # reboot
                

Der Computer startet nun neu. Wenn alles gut gelaufen ist, wird vom Bootloader ein Passwort zum entschlüsseln des lvm angefordert

Benutzer anlegen


In meinem Beispiel heißt der Benutzer Gerd

~ # useradd -m -g users -s /bin/bash gerd
~ # passwd gerd
                

Damit der Nutzer auch Kommandos mit Root-Rechten ausführen kann, installieren wir sudo und fügen Gerd der Gruppe wheel hinzu:

~ # pacman -S sudo
~ # nano /etc/sudores

### Wir kommentieren die folgende Zeile aus (das Leerzeichen muss auch entfernt werden) ###

%wheel ALL=(ALL) ALL
gpasswd -a gerd wheel
                

Nützliche Dienste und Gnome installieren


Damit unser Linux auch reibungslos funktioniert installieren wir ein paar nützliche Dienste und aktivieren sie:

~ # pacman -S acpid dbus avahi cups cronie
~ # systemctl enable acpid
~ # systemctl enable avahi-daemon
~ # systemctl enable org.cups.cupsd.service
~ # systemctl enable cronie
                

Gnome Installation


Die Installation von Gnome ist sehr einfach und schnell erledigt. Die Basis bilden die folgenden zwei Pakete:

# pacman -S gnome gdm
              

Zusätzlich kann noch das Paket gnome-extra installiert werden. Nach der Installation den Login-Manager gdm aktivieren:

# systemctl enable gdm
              

Installation auf eine SSD, nachträgliches TRIM


Ist das System auf eine SSD installiert ist es möglich TRIM nachträglich zu aktivieren. Dabei sollte beachtet werden, dass Kryptoanalysten erkennen können welche Sektoren auf der SSD beschrieben sind. Ist Trim nicht aktiv ist es wegen der Verschlüsselung unmöglich. Somit stellt es ein gewisses Sicherheitsrisiko dar. Weitere Informationen gibt's dazu im Arch Wiki.
Zunächst wird dm-crypt angewiesen, dass es Trim nutzen darf:

~ # sudo cryptsetup --allow-discards --persistent refresh /dev/mapper/main

Für den LVM muss die Option ebenfalls aktiviert werden:

~ # nano /etc/lvm/lvm.conf
issue_discards = 1

Nur noch die fstab anpassen:

~ # nano /etc/fstab

# /dev/mapper/main-home LABEL=home
UUID=1a...1236	/         	ext4      	noatime,discard	0 1