HowTo: Bootbares verschlüsseltes Betriebssystem

luks-logoHäufig möchte man ein System auf einer Festplatte/SSD oder einem USB-Stick verschlüsselt installieren. Die Beweggründe für eine Verschlüsselung sind dabei verschieden. Sei es das Risiko das man den USB-Stick oder Laptop verlieren könnte oder einfach für ein sicheres Gefühl.

Im nachfolgenden wird die Umsetzung für Linux-Systeme wie Debian, Ubuntu, CentOS oder Arch Linux erläutert. Zum Einsatz kommt hierbei cryptsetup/dm-crypt in Verbindung mit LVM. Nach der erfolgreichen Einrichtung wird der Nutzer zukünftig bei jedem Bootvorgang nach einem Passwort gefragt, alternativ lässt sich das System auch mit einem “Key” entschlüsseln, den man beispielsweise auf einem USB-Stick deponiert. Ziel ist damit ein bootbares verschlüsseltes Betriebssystem. Windows wird an dieser Stelle bewusst keine Beachtung geschenkt, da dies bereits auf einfache weiße mittels TrueCrypt realisiert werden kann.

Vorbereitung

Ladet euch zuerst eine beliebige Live-CD/DVD einer Linux Distribution herunter und brennt diese bzw. kopiert sie alternativ mit folgendem Befehl “dd if=/pfad/zur/systemiso of=/dev/sdx” (x steht für einen bestimmten Buchstaben) auf einen USB-Stick. Das könnte beispielsweise so aussehen “dd if=/home/user/archlinux-netinstall-i686.iso /dev/sdc”. Ansonsten möchte ich für diesen Schritt auf diese Anleitung für Windows wie auch Linux verweisen. Bootet anschließend die Live-CD/DVD. Dieser Punkt entfällt wenn ihr bereits ein lauffähiges Linux habt, auf dem ihr arbeiten könnt.

Partitionslayout

Prüft nun unter welcher Kennung (z.B. /dev/sda) eure Festplatte/SSD oder USB-Stick erkannt wurde, auf die ihr euer verschlüsseltes System installieren möchtet. Eine Möglichkeit dafür wäre sich den Inhalt des Ordners /dev mittels des folgenden Befehls anzeigen zu lassen.

# cd /dev

# ls –l sd*

In der Regel bekommt ihr mehr als ein Ergebnis. Um nun zu erfahren ob z.B. sda, sdb oder sdc euer Datenträger ist könnt ihr mit folgendem Befehl euch die Eigenschaften des Datenträgers (wie z.B. die Größe) anzeigen lassen.

# cfdisk /dev/sda

Anschließend könnt ihr mit diesem Tool “cfdisk” ebenso eure Partitionstabellen anlegen. Hierbei sollte eine ca. 100 MByte große Bootpartition angelegt werden und eine zweite die den Rest darstellt. Auf der zweiten Partition wird im nachfolgenden das System installiert.

Steht euch das Programm “cfdisk” oder eines der nachfolgenden nicht zur Verfügung, so könnt ihr es mit dem Paketmanager euer Distribution nach installieren (z.B. pacman –S gpart (Arch Linux), apt-get oder aptitude install gpart (Debian, Ubuntu) oder yum install gpart (CentOS)).

Verschlüsselung

Als erstes sollte man die neu angelegt Partition mit zufälligen Daten überschreiben, abhängig von der Größe des Datenträgers kann dies unter Umständen lange dauern. Bitte achtet darauf, dass ihr das X im nachfolgenden Befehl durch euren passenden Buchstaben ersetzt. Alle Daten auf diese Partition werden unwiderruflich gelöscht.

# shred –v /dev/sdX2

Das Tool “shred” überschreibt euren Datenträger dreimal mit zufälligen Werten. Alternativ kann die Anzahl auch mit dem zusätzlichen Parameter “-n” variiert werden (z.B. “shred -v -n 2 /dev/sdX2” für nur zweimal).

Für die eigentliche Verschlüsselung müssen nun noch gegebenenfalls die folgenden Kernelmodule geladen werden, damit man im nächsten Schritt die zuvor geschredderte Partition verschlüsseln kann. Achtet auch hier wieder darauf das “X” zu ersetzen. Sollte euer Datenträger größer als 2TiB sein, so sollte im nachfolgenden Befehl ebenso “aes-xts-plain” durch “aes-xts-plain64” ersetzt werden.

# modprobe dm-crypt

# modprobe aes-i586      // in der Regel nicht nötig, für 64bit Systeme ist es aes-x86_64

# cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sdX2

Nach dem ihr den Befehl bestätigt habe, könnt ihr euer gewünschtes Password festlegen, mit dem in Zukunft der Datenträger entschlüsselt wird. Um so länger das Password, um so besser.

Logical Volume Manager

Für die nachfolgenden Schritte müssen wir nun die frisch verschlüsselte Partition einbinden…

# cryptsetup luksOpen /dev/sdX2 lvm

… und auf dieser LVM und eine Volume Group einrichten. Das Volume Group, mit dem Namen “main”, wird unsere zukünftigen verschieden Partitionen, die wir innerhalb der verschlüsselten Umgebung anlegen möchten, verwalten.

# pvcreate /dev/mapper/lvm

# vgcreate main /dev/mapper/lvm

Wenn ihr wisst was ihr tut könnt ihr das nachfolgende Partitionslayout abändert. Ansonsten einfach übernehmen, aber natürlich gegebenenfalls auf die Größen der einzelnen Partitionen achten, falls euer Datenträger kleiner ist. Ebenso sollte keine Swap Partition angelegt werden, wenn ihr eine SSD verwendet.

# lvcreate -L 10GB -n root main
# lvcreate -L 2GB -n swap main
# lvcreate -l 100%FREE -n home main

alternativ kann man natürlich statt “GB” auch “M” für MegaByte angeben.

Betriebssystem

Hat bis hierher alles funktioniert, so ist der wesentliche Part dieser Anleitung abgeschlossen. Euer Datenträger ist nun verschlüsselt und entsprechend partitioniert. Nun müsst ihr nur noch ein Betriebssystem eurer Wahl auf die Logical Volumes (Partitionen innerhalb der Volume Group) installieren. Die entsprechenden Logical Volumes sind unter /dev/mapper/ zu finden, sofern zuvor die verschlüsselte Partition geöffnet wurde.

# cryptsetup luksOpen /dev/sdX2 lvm

# vgchange -ay

Häufig wird aber auch bereits von dem Setup des Betriebssystems selbst (Linux) eine Verschlüsselung angeboten, die die selbe Sicherheit bietet. Natürlich kann aber das zuvor beschriebene auch analog für einen sekundären Datenträger verwendet werden.

Abschluss

Ich hoffe ich konnte euch mit dieser Anleitung weiterhelfen. Solltet ihr Fehler finden oder Fragen haben, so schreibt einfach ein Kommentar.