Systemverschlüsselung mit dm-crypt

Aus wiki.archlinux.de

Zusammenfassung

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 2012.08.04 erstellt. Die Installation sollte aber auch mit zuküftigen 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 100MB 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. 2TB großen Festplatte schon mal 5 bis 6 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 2TiB sollte aes-xts-plain64 verwendet werden. Kernelunterstützung hierfür gibt es seit Kernel 2.6.33.


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


  • Jetzt wird die verschlüsselte Partiton 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


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


  • Dann werden die Partitionen gemounted:
   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 ermitteln wir zuerst die UUID der Swap-Partition:
   root@archiso ~ # blkid | grep swap


  • Dann wird die fstab generiert und anschließend angepasst:
   root@archiso ~ # genfstab -p /mnt >> /mnt/etc/fstab
   root@archiso ~ # nano /mnt/etc/fstab


  • Am Ende der Datei folgendes anfügen:
   # UUID=die_eben_ausgelesene_UUID LABEL=swap
   /dev/mapper/main-swap	none	swap	defaults	0 1


  • 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
   sh-4.2# echo Europe/Berlin >> /etc/timezone
   sh-4.2# nano /etc/hosts


  • Nun den Hostnamen hinzufügen:
   #<ip-address>	<hostname.domain.org>	<hostname>
   127.0.0.1	localhost.localdomain	localhost myhostname
   ::1	 localhost.localdomain	localhost myhostname


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


  • /etc/rc.conf bearbeiten:
   USELVM="yes".


  • HOOKS in /etc/mkinitcpio.conf bearbeiten:
   HOOKS="base udev autodetect sata usbinput 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


  • 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 und SysVInit deinstallieren

  • Als erstes bringen wir nun pacman auf den neusten Stand:
   [root@myhostname ~] pacman -Syy


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


  • Dann wird systemd installiert.
   [root@myhostname ~] pacman -S systemd


  • In /boot/syslinux/syslinux.cfg fügen wir den APPEND-Zeile vom LABEL arch folgenden Eintrag am Ende hinzu:
   init=/bin/systemd


  • Dann starten wir das System neu und wählen im Bootmenü den Eintrag Arch Linux aus:
   [root@myhostname ~] reboot
  • In /boot/syslinux/syslinux.cfg entfernen wir nun wieder den zuvor gesetzten Eintrag init=/bin/systemd.


  • Um systemd komplett zu integrieren, werden nun folgende Befehle ausgeführt:
   [root@myhostname ~] pacman -R initscripts sysvinit
   [root@myhostname ~] pacman -S systemd-sysvcompat


  • Services für systemd einrichten:
   [root@myhostname ~] systemctl enable dhcpcd@.service
   [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