Home > Allgemeines, Linux > Ubuntu – System vollständig verschlüsseln

Ubuntu – System vollständig verschlüsseln

27. April 2013

Gerade mobile Geräte sollte man schon alleine wegen des Risikos eines Diebstahls unbedingt verschlüsseln. In den meisten Fällen dürfte es reichen einfach nur mit EncFS das eigene Home-Verzeichnis zu verschlüsseln um alle persönlichen Daten zu schützen. Sind allerdings auf der Festplatte viele sensible Daten wie zB Datenbankdateien verstreut lässt sich ein System natürlich vollständig absichern.

Mit Hilfe von LUKS, LVM lässt sich so etwas problemlos realisieren. Beim Start von Linux wird dazu eine Passwortabfrage angezeigt, die es erlaubt das System zu entsichern. Dieser Artikel konzentriert sich vor allem auf das Einrichten von Systemen mit mehreren verschlüsselten Datenträgern.

LUKS als Verschlüsselungsmethode

LUKS (Linux Unified Key Setup) [1] ist Teil von Linux und bietet sich damit geradezu an das System damit zu verschlüsseln. Zudem ist es eine sichere und in der Praxis sehr bewährte Lösung. Bei LUKS handelt es sich um eine Erweiterung für den Device-Mapper dm-crypt [2] für verschlüsselte Geräte.

Ein Gerät kann dazu mit cryptsetup verschlüsselt und im Verzeichnis /dev/mapper gemapped werden. dm-crypt lädt zudem beim Systemstart alle verschlüsselten Geräte in der Konfigurationsdatei /etc/crypttab automatisch. In der Praxis wird das Dateisystem nicht direkt auf diesem Gerät erstellt, sondern noch eine Zwischenschicht mit LVM (Logical Volume Manager) [3] gebildet, damit sich der Inhalt einfacher verwalten lässt. Auf diese Weise ist es z.B. auch komfortabel möglich mehrere Volumes innerhalb eines verschlüsselten Geräts zu erstellen. Ohne LVM müsste man dazu zusätzlich eine extra Partitionstabelle innerhalb des verschlüsselten Geräts erstellen. LVM-Volumes enthalten dabei die Dateisysteme und werden wiederum von sogenannten LVM-Groups zu logischen Einheiten zusammengefasst.

Ein kleines Beispiel: Der Ubuntu-Installer erstellt z.B. bei der automatisierten Verschlüsselung mit cryptsetup ein verschlüsseltes Gerät. In diesem wird die LVM-Gruppe ubuntu–vg erstellt, die wiederum die LVM-Volumes ubuntu–vg-root für das Systemlaufwerk und ubuntu–vg-swap für das SWAP-Laufwerk enthält. Wird das System gestartet, lädt dm-crypt das verschlüsselte Gerät und LVM stellt wiederum die Volumes und bereit. Deren Dateisysteme können dann wie gewöhnlich über ihre Mapping-Pfade gemountet werden.

Verschlüsselung von Geräten mit nur einem Datenträger

Besitzern von Notebooks/Desktop-Rechner mit nur einem Datenträger haben es sehr einfach, denn viele Linux-Distributionen – wie auch Ubuntu – erlauben meist während des Installationsvorgangs den Datenträger zu verschlüsseln. Der Vorgang ist dabei so komfortabel, dass hier nicht mehr näher darauf eingegangen werden muss. Ubuntu zeigt seit Version 12.10 zudem beim Systemstart auch eine grafisch ansprechende Eingabeaufforderung für das vergebene Passwort.

Eine manuelle Einrichtung erfordert allerdings eine Live-CD und die Vorbereitung des Dateisystems vor der Installation [4].

Verschlüsselung von Geräten mit mehreren Datenträger

Selbst der Installer des (derzeit) aktuellen Ubuntu 13.04 kann zwar komfortabel das Systemlaufwerk verschlüsseln, bietet aber keinerlei Möglichkeiten an weitere Datenträger auch gleich zu verschlüsseln. Das ist besonders ärgerlich, wenn z.B. das Home-Verzeichnis ausgelagert werden soll. Damit aber nicht genug, denn selbst wenn die anderen Datenträger nachträglich mit cryptsetup verschlüsselt werden, wird für jeden Datenträger ein eigener Schlüssel erzeugt. Dies geschieht auch dann wenn dazu das selbe Passwort vergeben wird. Letztendlich führt das dazu, dass beim Start von Ubuntu für jedes verschlüsselte Gerät eine eigene Passwortabfrage erscheint. Der Start wird dadurch unnötig verzögert und erfordert das eintippen der (hoffentlich) langen Passwörter.

Allerdings gibt es seit Ubuntu 12.04 die Möglichkeit der Schlüsselvererbung [5]. Dazu vererbt ein Gerät den Schlüssel an ein weiteres Gerät. Wird das erste Gerät geladen, lässt sich das zweite Gerät gleich automatisch ohne zusätzliche Passworteingabe nachladen.

Ubuntu installieren und Systemlaufwerk verschlüsseln

Bei der Installation von Ubuntu muss lediglich die Verschlüsselung inklusive LVM ausgewählt werden. Ubuntu 13.04 bietet dies auch im grafischen Installer an. Bei älteren Versionen kann es sein, dass dieser Punkt den Einsatz einer Alternative-CD erfordert. Diese sind neben den normalen Datenträgerimages auch auf der Ubuntu-Website zu finden. Sie beinhalten kein Live-System und setzen auf den Textinstaller, der sich allerdings – was den Installationsablauf angeht – kaum vom grafischen Installer unterscheidet.

Ubuntu richtet während der Installation eine primäre Ext2-Partition für das Bootsystem ein. Gleich dahinter befindet sich dann in der ersten logischen Partition das verschlüsselte Gerät. Dieses beinhaltet die LVM-Gruppe ubuntu–vg, die wiederum die LVM-Volumes ubuntu–vg-root für das Systemlaufwerk und ubuntu–vg-swap für das SWAP-Laufwerk enthält.

Weitere Datenträger verschlüsseln und einrichten

Nach der Installation sollten bereits die Pakete lvm2, cryptsetup und dm-setup installiert sein, da sie für den Systemstart benötigt werden.

Nun kann jeder Datenträger mit folgendem Befehl verschlüsselt werden. Die darauf enthaltenen Daten gehen dabei natürlich verloren.

/lib/cryptsetup/scripts/decrypt_derived GERÄTENAME_DES_SYSTEMLAUFWERKS | cryptsetup -c aes-xts-plain -s 512 luksFormat NEUES_GERÄT

In den meisten Fällen dürfte der Gerätename des Systemlaufwerks sda5_crypt lauten. Das Kommando ls /dev/mapper/*crypt sollte frisch nach der Installation dabei nur einen Pfad ausgeben. Das Neue Gerät ist wiederum der Eintrag des Datenträgers in /dev und lautet für die zweite Festplatte meist /dev/sdb. Da allerdings sämtliche Daten verloren gehen, sollte man sich vorher unbedingt (z.B. mit fdisk -l) versichern, dass das richtige Gerät angegeben wurde!

Natürlich ist es ratsam den Datenträger bereits beim Systemstart einzubinden. Dazu muss lediglich ein Eintrag in die Konfigurationsdatei /etc/crypttab erfolgen. Dazu wird die Konfigurationsdatei mit einem Editor wie z.B. VIM oder Nano mit root-Rechten geöffnet und um eine weitere Zeile erweitert:

sda5_crypt UUID=09ba3da5-agd3-43e3-8a97-6100eef112a8 none luks
GERÄTENAME UUID=UUID_DES_GERÄTS sda5_crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived

Hierbei wird angenommen, dass sda5_crypt das Gerät des Systemlaufwerks ist. Die UUID des Beispiels unterscheidet sich natürlich auf jedem System und ist unerheblich. GERÄTENAME in Zeile 2 wird der Name mit dem das neue Laufwerk geladen werden soll eingetragen. Dabei wird meist der Name des verschlüsselten Geräts mit dem Suffix _crypt verwendet, um verschlüsselte Geräte z.B. von LVM-Einträgen zu unterscheiden. Der Name würde für /dev/sdb zB sdb_crypt lauten.

Die UUID identifiziert das verschlüsselte Gerät. Sie kann ganz einfach mit dem Befehl blkid ermittelt werden, welcher alle UUIDs ausgibt.

Im Anschluss an die UUID des neuen Datenträgers folgt der Name des Systemlaufwerks und die Angabe des Keyscripts für die Vererbung des Schlüssels. Damit wird dafür gesorgt, dass die Passwortabfrage beim Systemstart nur einmal erfolgt.

Bootsequenz aktualisieren

Damit die Einstellungen für alle installierten Kernels übernommen werden muss folgender Befehl abgesetzt werden:

update-initramfs -k all -u

Verschlüsseltes Gerät öffnen

Für die nächsten Schritte muss das verschlüsselte Gerät natürlich geöffnet werden um auf den Inhalt darin zugreifen zu können. Dazu reicht ein Neustart des Systems, da bereits der passende Eintrag im vorherigen Schritt in der /etc/crypttab erstellt wurde. Alternativ lässt sich mit folgenden Befehl das Gerät aber auch gleich ohne Neustart öffnen:

/lib/cryptsetup/scripts/decrypt_derived GERÄTENAME_DES_SYSTEMLAUFWERKS | cryptsetup luksOpen GERÄT GERÄTENAME

Der GERÄTENAME ist dabei wie in der Konfigurationsdatei /etc/crypttab frei wählbar.

LVM-Volume einrichten

Nun soll ein LVM-Volume für das Dateisystem auf dem zusätzlichen verschlüsselten Datenträger eingerichtet werden. Dabei ist es natürlich möglich die von Ubuntu eingerichtete LVM-Group ubuntu-vg zu verwenden. Allerdings ist es sicher nicht verkehrt stattdessen eine neue LVM-Group für die Benutzerdaten zu erstellen:

vgcreate GRUPPENNAME

GRUPPENNAME steht dabei für einen Namen für die Gruppe wie z.B. userdata–vg.

Anschließend wird das LVM-Volume innerhalb der erstellten LVM-Gruppe erzeugt:

lvcreate --extents 100%VG --name VOLUME_NAME GRUPPENNAME

Der erste Parameter gibt an, dass sich das neue Volume über die gesamte Gruppe erstrecken soll. VOLUME_NAME ist der Name des zu erzeugenden Volumes und sollte sich an das Namensschema richten. Für die LVM-Gruppe userdata–vg könnte der Name z.B. userdata–vg-homes lauten. Der letzte Parameter GRUPPENNAME gibt den Namen der LVM-Gruppe an, in welcher das Volume erstellt werden soll, wie z.B. userdata–vg.

Das erstellte Volume sollte nun mit folgenden Befehl angezeigt werden können:

lvdisplay | grep -A2 -B1 "LV Path"

Es wird anschließend eine Liste mit allen gefundenen Volumes (LV Name), ihre Gruppen (VG Name) und deren Pfade (LV Path) ausgegeben.

Dateisystem erstellen und einrichten

Nun kann das Dateisystem erstellt werden. Dazu muss aber Mapping-Pfad des LVM-Volumes bekannt sein. Dieser lässt sich sehr einfach ermitteln, da sich dieser innerhalb des Pfades /dev/mapper befindet und den Namen des LVM-Volumes trägt.

Das Volume kann nun mit einem Dateisystem wie z.B. Ext4 formatiert werden:

mkfs.ext4 /dev/mapper/VOLUME_NAME

Natürlich soll das Laufwerk nun beim Systemstart gemounted werden damit es automatisch zur Verfügung steht. Dazu muss nur die /etc/fstab erweitert werden. Dazu wird diese Konfigurationsdatei mit einem Texteditor wie VIM oder Nano geöffnet:


# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#

# /boot was on /dev/sda1 during installation
UUID=cd703e68-3a50-4b61-965e-0c97908fc5b3 /boot ext2 defaults 0 2

/dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1
/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0

#ZEILE FÜR NEUES LVM-GERÄT:
/dev/mapper/userdata--vg-homes /home ext4 rw 0 2

Die letzte Zeile zeigt dabei das einen Beispieleintrag für ein LVM-Volume mit dem Pfad /dev/mapper/userdata–vg-homes und dem Dateisystem ext4, das in den Pfad /home eingehängt wird. Natürlich kann hier auch anstatt des Pfades die UUID angegeben werden um das Laufwerk eindeutig zu identifizieren.

Anmerkung zu /homes: Natürlich sollte beachtet werden, dass das Einhängen in /home wie in diesem Beispiel zusätzlich erfordert, dass die Benutzerdaten aus dem aktuellen /home-Verzeichnis erst auf das neue Laufwerk verschoben werden müssen, da ja das neue /home-Verzeichnis das alte überlappt. Die alten Daten sind dann nicht mehr sichtbar. Am Einfachsten ist es vor dem Neustart das Dateisystem des neuen /homes in ein anders beliebiges Verzeichnis zu mounten und die Benutzerdaten zu verschieben.

Das Ergebnis

Nach einem Neustart zeigt das System eine Passwortabfrage an. Wird das korrekte Passwort eingegeben, wird erst das Systemlaufwerk und anschließend alle anderen verschlüsselten Laufwerke geladen.

Das Einrichten eines komplett verschlüsselten Systems ist zwar sehr viel aufwendiger als das schlichte Verschlüsseln des Home-Verzeichnisses, umfasst dafür aber sämtliche Daten der Festplatte(n). Natürlich wäre es aber wünschenswert, wenn Systeme wie Ubuntu von Anfang an auch anbieten würden weitere Datenträger zu verschlüsseln und Verzeichnisse wie z.B. /homes auszulagern. Allerdings muss dieser Vorgang nur sehr selten durchgeführt werden und hält sich auch sonst in Grenzen.

Kommentare sind geschlossen