Dieser Artikel beschreibt, wie ein vollverschlüsseltes
System mit Hilfe von Ubuntu-Linux eingerichtet wird (Neuinstallation). Der gesamte Artikel kann dabei Schritt für Schritt nachvollzogen werden um ans Ziel zu kommen. Dennoch sollte man sich als Neuling einen ruhigen Tag Zeit nehmen, um die Thematik zu erfassen. Man muss sich bei weitem nicht alles merken, sich aber einmal eingelesen zu haben schadet nie.
Das hier beschriebene Setup wurde auf den folgenden Versionen getestet (jeweils 32bit/64bit):
“Vollverschlüsselt” heißt in diesem Fall:
Weitere Eckpunkte:
/home-Partition angelegt, was Backups und Neuinstallationen oft erheblich erleichtert./, /home und swap liegen.Für einen besseren Überblick fasse ich die Eckpunkte des Installationsablaufs vorab kurz zusammen:
/boot zu nutzen.chroot in das frisch installierte System, um es mit der nötigen Software (LVM, LUKS/cryptsetup) auszustatten (sonst könnte man nicht booten).
Sofern man jetzt nur Bahnhof versteht: keine Panik. Wird schon werden. “It is no rocket science.”
Der gelungene Artikel im Linux Magazin 2005/08: Geheime Niederschrift - Festplattenverschlüsselung mit DM-Crypt und Cryptsetup-LUKS: Technik und Anwendung vermittelt trotz seines Alters viel LUKS Hintergrundwissen und beugt ggf. der ein oder anderen Frage vor, warum z.B. welche Verschlüsselungsmethode (nicht) genutzt wird. Wen dies allerdings nicht interessiert kann natürlich auch ohne diese Zusatzinformationen ein crypto-System aufsetzen.
Es bietet sich an, die gesamte Installation erst einmal gezielt in einer virtuellen Maschine auszuprobieren, bevor man sein Produktivsystem lahm legt.
Ich biete ein crypt-setup-bash-Skript an, welches die Installation schneller und einfacher gestaltet. Das Skript erfragt die nötigen Angaben (Ziellaufwerk, Partitionsgrößen, Verschlüsselungsstärke etc.) vom Benutzer und arbeitet anschließend alles so ab, wie es unter “manuelle Installation” beschrieben wird. Das spart viel Tipparbeit und vermeidet Fehler. So braucht man im Vergleich zu einer Standardinstallation nur wenige Minuten länger um ein vollverschlüsseltes System zu installieren.
wget "http://blog.andreas-haerter.com/_export/code/2011/06/18/ubuntu-full-disk-encryption-lvm-luks.sh?codeblock=1" -O "/tmp/ubuntu-full-disk-encryption-lvm-luks.sh" chmod a+rx "/tmp/ubuntu-full-disk-encryption-lvm-luks.sh" sudo "/tmp/ubuntu-full-disk-encryption-lvm-luks.sh"
Im Folgenden ist sdX durch das eigene Ziel-Laufwerk (z.B. sda oder hda) zu ersetzen bzw. an das eigene System anzupassen. Achte darauf, sofern du Kommandos via “Kopieren & Einfügen” übernimmst.
Boote von der Installations-CD und starte eine Live-Session (also nicht den Installer). Der entsprechende Menüpunkt sollte “Ubuntu ausprobieren” oder ähnlich lauten (kann von Ubuntu-Version zu Version leicht variieren und hängt auch davon ab, wann ein Taste gedrückt wird). Bitte wähle gleich die Sprache aus, mit welcher du das eigentliche System auch betreiben willst. Dies verhindert Probleme hinsichtlich des Tastaturlayouts und der Festlegung des Passworts.3)
Da die Verschlüsselung von einer Live-Session aus eingerichtet wird und diese natürlich nur das Nötigste mitbringt, müssen für die laufende Session noch einige für die Verschlüsselung notwendigen Pakete und deren Abhängigkeiten via Terminal installiert werden (lvm2 und cryptsetup):
sudo apt-get install lvm2 cryptsetup
Aus verständlichen Gründen kann nicht einfach neu gestartet werden (→ Live-Session, die Änderungen wären nach dem Booten wieder verschwunden). Daher ist ein benötigtes Kernel-Modul, welches die gerade installierten Pakete bereitstellen, manuell via Terminal zu laden:
sudo modprobe dm-crypt
Die gestartete Live-Session bringt nun alle Voraussetzungen mit, um das vollverschlüsselte System zu installieren.
Nun wird die Festplatte partitioniert. Dies erfolgt mit Hilfe von GParted.4) Selbiges wird einfach via Terminal (→ sudo gparted) oder via “System→Systemverwaltung→Gparted” gestartet.
Folgende Partitionen sind anzulegen:
dev/sdX1, ext3, 200MB am Anfang des Laufwerksdev/sdX2, unformatiert, mindestens 8GB (darin muss die root- und home- sowie swap-Partition Platz finden).Nachdem mal alle Aktionen durchgeführt hat (→ grüner Haken anklicken) kann Gparted geschlossen werden.
Falls das Ziellaufwerk bisher unverschlüsselte Daten gespeichert hat, kann man die vorhandenen Partitionen mit Zufallszahlen überschreiben, um auch jegliche (theoretische!) Datenrekonstruktion einzelner Dateifragmente sicher zu verhindern:
sudo shred -vn 1 /dev/sdX1 sudo shred -vn 1 /dev/sdX2
Der Vorgang ist zudem ein guter Belastungs- bzw. Zuverlässigkeitstest der Festplatte, zieht sich aber ggf. mehrere Stunden oder sogar Tage hin (je nach Laufwerksgröße und CPU).
Sofern das Laufwerk bereits verschlüsselt war (oder man kein absoluter Sicherheitsfanatiker ist) kann dieser Punkt übersprungen werden. Bei der Nutzung von SSDs sollte ebenfalls von diesem Vorgang absehen werden.
Mittels des Befehls cryptsetup bzw. dessen Unterprogramm luksFormat bereitet man die Zielpartition sdX2 auf den Einsatz als Crypto-Laufwerk vor. Nun ist auch die Entscheidung zu fällen, welchen Verschlüsselungsalgorithmus, Chaining Mode
und Initialisierungsvektor man verwenden will. Empfehlenswert ist hier aes-xts-plain, welches u.a. auch gegen das sog. “Watermarking” und andere bekannte Angriffe schützt und mittels AES-256
die Daten sicher verschlüsselt:
sudo cryptsetup --cipher aes-xts-plain --key-size 512 --verify-passphrase luksFormat /dev/sdX2 [Passwort festlegen. Achtung: es werden keine * oder Ähnliches angezeigt]
Wähle ein sicheres, langes Kennwort bzw. einen Kennsatz. Ansonsten ist auch die beste Verschlüsselung praktisch nutzlos.
Damit der Installer das Crypto-Laufwerk ansprechen kann, muss es nach dem Formatieren geöffnet und mit einem eigenen Namen versehen werden. Anschließend ist es via /dev/mapper/<gewählter name> ansprechbar. Im Folgenden wird beispielhaft der Name lvm_crypt5) verwendet, der natürlich ohne Probleme übernommen werden kann:
sudo cryptsetup luksOpen /dev/sdX2 lvm_crypt
XTS unterstützt 128 oder 256 Bit lange Schlüssel. Die Keysize von 512 heißt in diesem Fall, dass sowohl AES als auch XTS die maximale Schlüssellänge von 256 Bit verwenden. Für leistungsschwächere Systeme käme auch --key-size 256 in Betracht, was einer 128 Bit Verschlüsselung entspricht.
XTS wird erst seit Ubuntu 8.04 (Hardy Heron) unterstützt und ist sicherer als CBC. aes-xts-plain ist daher dem oft verwendeten aes-cbc-essiv:sha256 vorzuziehen, wenngleich auch Letzteres als sicher anzusehen ist und – sofern ältere Kernel zum einsatz kommen müssen – sich ein Einsatz nicht vermeiden lässt. aes-cbc-plain ist als kritisch zu betrachten, ESSIV statt PLAIN als Initialisierungsvektor ist in Kombination CBC wirklich jedem zu empfehlen.
Der Logical Volume Manager (LVM) wird hier nicht genutzt, um mehrere physische Laufwerke zu verbinden. Er wird vornehmlich eingesetzt um zu verhindern, dass mehrere Keys verwaltet bzw. mehrere Passwörter beim Booten eingeben werden müssen. Da /home eine separate Partition erhält und auch swap verschlüsselt werden soll, müsste ansonsten während des Boot-Vorgangs für jede dieser Partitionen ein Passwort eingegeben werden. Dieses Dilemma wird dadurch umgangen, dass ein LVM-Volume inkl. LVM-Volume-Group in der gerade mittels cryptsetup verschlüsselten und geöffneten Partiton erstellt wird. Das LVM-Volume wird über den Befehl pvcreate initialisiert, innerhalb des LVM-Volumes wird dann eine LVM-Volume-Group mit dem Namen ubuntu über den Befehl vgcreate angelegt:
sudo pvcreate /dev/mapper/lvm_crypt sudo vgcreate ubuntu /dev/mapper/lvm_crypt
Im LVM-Volume bzw. der LVM-Volume-Group ubuntu können jetzt die benötigten Partitionen erstellt werden. Swap sollte dabei die ~1,3fache Größe des vorhanden Arbeitsspeichers haben (zumindest sofern man auf der ganz sicheren Seite hinsichtlich Supsend-to-disk (S4)/Ruhezustand sein will). Falls Speicherplatz (z.B. beim Einsatz von SSDs) knapp ist, kann natürlich auch weniger genommen werden. Wie bei der Größe der root-Partition gehen die Meinungen über sinnvolle Werte allerdings auseinander. Daher sind die folgenden Werte exemplarisch zu verstehen, können aber ohne Probleme übernommen werden. Im für diesen Artikel verwendeten Rechner waren 4GB Arbeitsspeichers verbaut (→ mal 1,3 = 5200MB swap) und es wurde eine 25GB große root-Partition verwendet:
sudo lvcreate -L 5200M -n swap ubuntu sudo lvcreate -L 25000M -n root ubuntu sudo lvcreate -l 100%FREE -n home ubuntu
Weitere Partitionen können nach dem gleichen Schema angelegt werden. Falls die Syntax nicht ganz klar sein sollte hilft man lvcreate.
Um Problemen mit einigen Versionen des grafischen Ubuntu-Installers ubiquity vorzubeugen, sollten die angelegten Partitionen unbedingt einmal formatiert werden (in der eigentlichen, grafischen Installation werden die Partitionen nochmals formatiert und es können – sofern gewünscht – andere Dateisysteme als EXT4 ausgewählt werden):
sudo mkswap /dev/mapper/ubuntu-swap sudo mkfs.ext4 /dev/mapper/ubuntu-root sudo mkfs.ext4 /dev/mapper/ubuntu-home
Damit wären die Vorbereitungen hinsichtlich des verschlüsselten Laufwerks abgeschlossen. Man verfügt über alle nötigen Partitionen und es kann mit der eigentlichen Installation des Systems begonnen werden.
Nun startet man den grafischen Ubuntu Installationsassistenten ubiquity via Doppelklick auf die “Ubuntu <version> installieren” Verknüpfung auf dem Desktop:
Nach Auswahl von Sprache, Zeitzone etc. muss man im Dialog “Die Festplatte vorbereiten” (bzw. ähnliche Bezeichnung, kann von Ubuntu-Version zu Version leicht variieren) die manuelle Partitionierung wählen. Anschließend werden die vorhin angelegten Partitionen entsprechend zugewiesen:6)
/dev/sdX1/boot/dev/mapper/ubuntu-root//dev/mapper/ubuntu-home/homeNun folgt man einfach den weiteren Anweisungen des Installationsassistenten um das System zu installieren. Dabei kann man ohne schlechtes Gewissen die automatische Benutzeranmeldung aktivieren, um zusätzlich zum Verschlüsselungspasswort in Single-User-Umgebungen nicht noch das Benutzerkennwort beim Starten des Rechner eingeben zu müssen. Man darf den Rechner nach erfolgter Installation allerdings NICHT neu starten. Davor sind noch ein paar Nacharbeiten zu erledigen.
Wenn jetzt neu gestartet würde, könnte man das System nicht hochfahren. Es verfügt nämlich noch nicht über die nötige Software um das verschlüsselte Laufwerk ansprechen zu können und den Benutzer nach dem Passwort zum entschlüsseln zu fragen. Daher wechselt man mittels chroot in das gerade auf die Festplatte kopierte System und installiert die benötigten Pakete lvm2 und cryptsetup (Achtung: alle nachfolgenden Befehle müssen im selben Terminalfenster ausgeführt werden. Außerdem nicht vergessen sdX1 durch die eigene Partition, z.B. sda1 zu ersetzen):
sudo mount /dev/mapper/ubuntu-root /mnt sudo mount /dev/sdX1 /mnt/boot sudo mount -o bind /dev /mnt/dev sudo mount -t proc proc /mnt/proc sudo mount -t sysfs sys /mnt/sys sudo cp /etc/resolv.conf /mnt/etc/resolv.conf sudo chroot /mnt /bin/bash apt-get install cryptsetup lvm2
openpty()-, /etc/crypttab, und update-initramfs-Warnungen (“Schreiben des Protokolls nicht möglich…”, “cryptsetup: WARNING: invalid line in /etc/crypttab”, “Cannot find /lib/modules/[…]-generic”) können ignoriert werden.
Nun ist man fast am Ziel. Ubuntu wurde in eine LVM-Group auf einem Crypto-Laufwerk installiert und verfügt über die nötige Software zum Entschlüsseln der Daten. Damit das Crypto-Laufwerk aber direkt beim booten automatisch zur Entschlüsselung angefordert wird, muss noch die /etc/crypttab um einen entsprechenden UUID-Eintrag der /dev/sdX2-Partition ergänzt werden. Der folgende Befehl ermittelt die UUID und schreibt die benötigte Zeile in die
/etc/crypttab (nicht vergessen sdX2 durch die eigene Partition, z.B. sda2 zu ersetzen):
echo "lvm_crypt UUID=$(ls -la /dev/disk/by-uuid | grep $(basename /dev/sdX2) | cut -d ' ' -f 9) none luks" >> /etc/crypttab
Die Änderungen an der /etc/crypttab müssen jetzt noch übernommen werden (“cryptsetup: WARNING: invalid line in /etc/crypttab”- und “Cannot find /lib/modules/[…]-generic”-Warnungen können ignoriert werden):
update-initramfs -u -k all
Fertig . Beim Bootvorgang sollte dann nach dem Passwort gefragt werden und man kann auf seinem sicher verschlüsselten System wie gewohnt arbeiten. Die chroot-Umgebung kann also geschlossen und das System neu gestartet werden:
exit sudo reboot
luksDump Aktion ausgegeben werden (nicht vergessen sdX2 durch die eigene Partition, z.B. sda2 zu ersetzen): sudo cryptsetup luksDump /dev/sdX2 [...es folgt eine Beispielausgabe...] Key Slot 0: ENABLED Iterations: xxxxxx Salt: [...] [...] Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Um ein neues Passwort hinzuzufügen wird luksAddKey verwendet:
sudo cryptsetup luksAddKey /dev/sdX2
Um ein bestehendes Passwort zu entfernen wird luksRemoveKey verwendet:
sudo cryptsetup luksRemoveKey /dev/sdX2
sudo apt-get install lvm2 cryptsetup sudo modprobe dm-crypt
Öffnen/entschlüsseln des Laufwerks (ersetze ggf. sda2 durch dein eigenes Ziellaufwerk):
sudo cryptsetup luksOpen /dev/sda2 lvm
Aktivieren des LVM um /dev/ubuntu/home, /dev/ubuntu/root und /dev/ubuntu/swap zu erhalten:
sudo pvscan sudo vgscan sudo lvscan sudo vgchange -a y
Einhängen der root- sowie der home-Partition:
sudo mkdir /mnt/root sudo mount /dev/ubuntu/root /mnt/root sudo mkdir /mnt/home sudo mount /dev/ubuntu/home /mnt/home
Auf die home-Partition kann nun über /mnt/home, auf die root-Partition über /mnt/root zugegriffen werden. Sofern es Probleme mit den Berechtigungen gibt kann man z.B. einen Dateimanager mit root-Rechten starten, um Daten zu kopieren etc.: gksudo nautilus.
System verschlüsseln
Weiterführend
Abschließender Hinweis: Ich habe diesen Artikel ursprünglich unter http://readm3.org/de/os/ubuntu/full-disk-encryption-lvm-luks veröffentlicht, ihn aber aus organisatorischen Gründen in mein Blog verlegt.
sudo apt-get install gparted schnell nachinstalliert werden.