Systemverschlüsselung mit dm-crypt

Aus wiki.archlinux.de
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.

Dieser Artikel behandelt die Installation eines ArchLinux-Grundsystems mit verschlüsseltem LVM und der kompletten Integration von Systemd. Die Anleitung wurde unter Verwendung der Installations-Medien 2013.01.04 (archlinux-2013.01.04-dual.iso) erstellt. Die Installation sollte aber auch mit zukünftigen Medien (zumindest vorerst) nicht großartig anders verlaufen.


Installationsmedium vorbereiten


  • Das Image auf CD brennen oder unter einem funktionierendem Linux-System (z. B. Live-CD) auf einen USB-Stick kopieren. Dies funktioniert wie folgt:
   # dd if=archlinux.iso of=/dev/sdx


Installation starten

  • Nun wird vom vorbereiteten Installations-Medium gebootet und das Setup für die entsprechende Systemarchitektur (i686 oder x86_64) gestartet.


  • Auf der Konsole angekommen, wird zuerst einmal das deutsche Tastatur-Layout geladen.
   root@archiso ~ # loadkeys de-latin1

Da das Layout derzeit noch auf Englisch eingestellt ist, muss z anstatt y und ß anstatt - eingegeben werden.


Festplatte vorbereiten

  • Jetzt wird es Zeit, die Festplatten zu partitionieren. Dies kann z. B. mit cfdisk durchgeführt werden. Für unseren Zweck erstellen wir zwei Partitionen:

sda1 mit einer Größe von 100 MB und boot-Flag (dies wird später unsere Boot-Partition)

sda2, welche den Rest der Festplatte spendiert bekommt (hier wird unser verschlüsseltes LVM seinen Platz drauf finden)


  • Zur Sicherheit wird die Festplatte jetzt überschrieben:
   root@archiso ~ # shred -v /dev/sda2

Standardmäßig wird dieser Vorgang drei Mal durchgeführt, wobei ein Durchgang bei einer ca. 2 TB großen Festplatte schon mal fünf bis sechs Stunden in Anspruch nehmen kann.


  • Wer deswegen den Vorgang nur einmal durchführen möchte, kann stattdessen folgenden Befehl ausführen:
   # shred -v -n 1 /dev/sda2


Verschlüsseltes LVM einrichten

  • Jetzt werden die benötigte Kernel-Modul für die Verschlüsselung geladen:
   root@archiso ~ # modprobe dm-crypt


  • Anschließend wird sda2 verschlüsselt:
   root@archiso ~ # cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda2


Hinweis: Für Volumes größer als 2 TiB sollte aes-xts-plain64 verwendet werden. Kernelunterstützung hierfür gibt es seit Kernel 2.6.33. Die Option aes-xts-plain64 kann auch für Volumes kleiner 2 TiB verwendet werden.


  • Die Eingabeaufforderung mit YES bestätigen und anschließend ein sicheres Passwort vergeben. Hierbei sollten schon 20 Zeichen inkl. Sonderzeichen und Zahlen verwendet werden.


  • Jetzt wird die verschlüsselte Partition geöffnet und das LVM eingerichtet:
   root@archiso ~ # cryptsetup luksOpen /dev/sda2 lvm
   root@archiso ~ # pvcreate /dev/mapper/lvm
   root@archiso ~ # vgcreate main /dev/mapper/lvm
   root@archiso ~ # lvcreate -L 200GB -n root main
   root@archiso ~ # lvcreate -L 8GB -n swap main
   root@archiso ~ # lvcreate -l 100%FREE -n home main

Hinweis: Je nach Festplattengröße und/oder zukünftiger Erweiterung des Grundsystems kann auch eine geringere Größe für das root-Volume (-n root) festgelegt werden. Wenn das home-Volume (-n home) nicht den verbleibenden Platz komplett ausfüllt, können später LVM-Snapshots erstellt werden. Dazu kann - wie bei den anderen lvcreate-Befehlen - eine geringere Größe angegeben werden, zum Beispiel -L 50GB.


  • Mit mkfs wird nun das Dateisystem auf die Partitionen geschrieben.
   root@archiso ~ # mkfs.ext4 -L root /dev/mapper/main-root
   root@archiso ~ # mkfs.ext4 -L home /dev/mapper/main-home
   root@archiso ~ # mkfs.ext4 -L boot /dev/sda1
   root@archiso ~ # mkswap -L swap /dev/mapper/main-swap


  • Dann werden die Partitionen gemountet:
   root@archiso ~ # mount /dev/mapper/main-root /mnt
   root@archiso ~ # mkdir /mnt/home
   root@archiso ~ # mount /dev/mapper/main-home /mnt/home
   root@archiso ~ # mkdir /mnt/boot
   root@archiso ~ # mount /dev/sda1 /mnt/boot


Basissystem und Bootloader installieren

  • Bevor es jetzt los geht und wir das Basissystem installieren, testen wir erstmal die Internetverbindung:
   root@archiso ~ # ping -c 3 www.google.com


  • Besteht keine Verbindung, sollte folgender Befehl Abhilfe schaffen:
   root@archiso ~ # dhcpcd


  • Wir bearbeiten nun zuerst unsere Mirrorliste, und kommentieren alle weit entfernten Server mit # aus.
   root@archiso ~ # nano /etc/pacman.d/mirrorlist

Dies kann bei der Installation Geschwindigkeitsvorteile von ca. 30 Minuten bringen.


  • Dann wird das Basissystem inkl. Bootloader (ich habe mich für syslinux entschieden) installiert.
   root@archiso ~ # pacstrap /mnt base base-devel syslinux


  • Nach der Basis-Installation wird syslinux in den MBR von sda geschrieben:
   root@archiso ~ # syslinux-install_update -i -a -m -c /mnt


  • Dann wird syslinux konfiguriert:
   root@archiso ~ # nano /mnt/boot/syslinux/syslinux.cfg


  • Die APPEND-Zeile muss bei beiden Einträgen (arch und archfallback angepasst werden:
   APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8


System konfigurieren

  • Nun aktivieren wir die Swap-Partition:
   root@archiso ~ # swapon -L swap


  • Dann wird die fstab generiert:
   root@archiso ~ # genfstab -U -p /mnt >> /mnt/etc/fstab
   root@archiso ~ # nano /mnt/etc/fstab


  • Jetzt wechseln wir in die chroot-Umgebung:
   root@archiso ~ # arch-chroot /mnt


  • Spracheinstellungen in /etc/locale.conf festlegen:
   LANG="de_DE.UTF-8"
   
   # Keep the default sort order (e.g. files starting with a '.'
   # should appear at the start of a directory listing.)
   LC_COLLATE="C"
   
   LC_TIME="de_DE.UTF-8"
  • /etc/locale.gen editieren und locales generieren:
   sh-4.2# nano /etc/locale.gen


  • # vor folgenden locales entfernen:
   de_DE.UTF-8 UTF-8
   de_DE ISO-8859-1
   de_DE@euro ISO-8859-15


  • locales generieren:
   sh-4.2# locale-gen


  • Config-Dateien für systemd anpassen:
   sh-4.2# echo myhostname >> /etc/hostname
   sh-4.2# echo KEYMAP=de-latin1 >> /etc/vconsole.conf
   sh-4.2# echo FONT=lat9w-16 >> /etc/vconsole.conf
   sh-4.2# echo FONT_MAP=8859-1_to_uni >> /etc/vconsole.conf


  • Symlink für die Zeitzone erstellen:
   sh-4.2# ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime


  • /etc/mkinitcpio.conf anpassen:
   sh-4.2# nano /etc/mkinitcpio.conf


  • Die MODULES- und HOOKS-Werte entsprechend anpassen:
   MODULES="ext4"
   HOOKS="base udev autodetect block keyboard keymap encrypt lvm2 filesystems fsck shutdown"

Die hier vorgegebenen Hooks sind für das Booten von einer S-ATA-Festplatte mit einer USB-Tastatur gedacht und müssen daher evtl. angepasst werden. Alle verfügbaren Hooks sind unteter https://wiki.archlinux.org/index.php/Mkinitcpio#HOOKS zu finden.

Kernel-Image erstellen und der erste Neustart

  • Damit es bei der Erstellung des Kernel-Images nicht zu dem Fehler bsdcpio: Failed to set default locale kommt, führen wir folgendes aus:
   sh-4.2# export LANG=de_DE.UTF-8


  • Dann erstellen wir das Kernel-Image:
   sh-4.2# mkinitcpio -p linux


  • Jetzt legen wir das Passwort für root an:
   sh-4.2# passwd


  • Damit per DHCP automatisch eine IP-Adresse beim Bootvorgang bezogen wird, aktivieren wir den entsprechenden Systemd-Dienst:
   sh-4.2# systemctl enable dhcpcd@.service


  • Anschließend verlassen wir die chroot-Umgebung und hängen die Partitionen aus:
   sh-4.2# exit
   root@archiso ~ # umount /mnt/{boot,home,}
   root@archiso ~ # reboot


  • Der PC startet nun neu und wir werden – sofern bisher alles gut gegangen ist – von unserem Bootloader gefolgt von der Eingabeaufforderung zur Entschlüsselung des cryptdevice begrüßt. Gebt das Passwort ein und meldet euch, nachdem der Bootvorgang abgeschlossen ist, als root an.


Systemd einrichten

  • Sollte das Netzwerk nicht gestartet sein, folgenden Befehl ausführen:
   [root@myhostname ~]# dhcpcd


  • Welche IP-Adresse vergeben wurde, kann mittels ip-Programm festgestellt werden:
   [root@myhostname ~]# ip addr


  • Services für systemd einrichten:
   [root@myhostname ~]# systemctl enable cronie.service
   [root@myhostname ~]# systemctl enable lvm.service


  • Im Falle, dass ein x86_64 System installiert wurde, kann in der /etc/pacman.conf noch das multilib-repo aktiviert werden. Anschließend müssen pacman’s Paketlisten wieder auf den neusten Stand gebracht werden:
   [root@myhostname ~]# pacman -Syy


  • Ein letzer Reboot und wir können damit anfangen, unser frisch installiertes Arch an unsere Bedürfnisse anzupassen.
   [root@myhostname ~]# reboot


Erstellt von Durag am 20. August 2012