Partitionen verschlüsseln
Achtung!
Ohne ein sicheres Kennwort nutzt die stärkste Verschlüsselung nichts! Wie man Passwörter am besten wählt, steht hier: Sicherheits 1x1
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Diese Anleitung geht auf die Erstellung und Wartung von verschlüsselten Datenträgern mittels LUKS - Linux Unified Key Setup 🇬🇧 - ein. Es handelt sich um das Standardverfahren zur Festplattenverschlüsselung unter Linux. Dabei werden alle nötigen Informationen zum Öffnen einer verschlüsselten Partition oder Container-Datei in dieser gespeichert. Das erlaubt es auch, beim Anschließen eines externen Datenträgers mit verschlüsselten Partitionen diese nach Passwortabfrage automatisch einzubinden.
Es wird hier nur auf die Verwendung von LUKS eingegangen. Für eine Schritt-für-Schritt-Anleitung zum Verschlüsseln des Systems bitte die Artikel Daten verschlüsseln und System verschlüsseln hinzuziehen.
Hinweis:
Alle folgenden Befehle benötigen Root-Rechte. Wenn man nicht sudo
vor das betreffende Kommando setzen möchte, kann man temporär mit sudo -s
eine Root-Shell öffnen. Diese wird nach Abschluss der Arbeiten mit dem Befehl exit
wieder geschlossen.
Vorbereitung¶
Benötigt wird das Paket cryptsetup, welches im Hauptartikel LUKS beschrieben wird.
Verwendung¶
Hier wird ein Auszug der wichtigsten LUKS-Funktionen dargestellt. Für weitere Informationen sei auf die entsprechenden Dokumentationen wie u.a. die Manpage von cryptsetup verwiesen.
Erstellen¶
Achtung!
Sollte nicht das gesamte System verschlüsselt werden, besteht die Gefahr, dass persönliche Daten in unverschlüsselten Bereichen gespeichert werden. Um dieses Risiko zu minimieren, sollte der Artikel Vorbereitung zur Teilverschlüsselung durchgearbeitet werden. Ohne diese Maßnahmen ist die Verschlüsselung möglicherweise wirkungslos.
Außerdem ist aus Sicherheitsgründen empfehlenswert, die Partition ein mal mit Zufallszahlen zu überschreiben, vor allen Dingen, wenn auf dieser vorher unverschlüsselte Daten gespeichert waren [6]. Ansonsten sind unter Umständen viele Dateien nach dem Verschlüsseln noch auslesbar.
Zum Erstellen eines LUKS-Geräts wird eine zu überschreibende Partition erzeugt oder ausgewählt [3]. Daraufhin werden diese Befehle ausgeführt, wobei GERÄTEDATEI
durch den entsprechenden Namen ersetzt werden muss, z.B /dev/sde9:
Hinweis:
Bereits bei der Installation kann auch bei der manuellen Partitionierung eine zu verschlüsselnde Datenpartition unter "Benutzen als:" mit dem Eintrag "physikalisches Volume für Verschlüsselung" zur Verschlüsselung ausgewählt werden. Danach kann man ein Passwort festlegen. In der Übersicht erscheint dann das neue Laufwerk, welches man z.B. als /cryptodaten wie ein unverschlüsseltes Laufwerk ins System einbinden und formatieren lassen kann. /mnt sowie Unterordner sind für temporär eingehängte Partitionen freizuhalten und daher hier eher nicht zu benutzen.
In der Regel möchte man jedoch einfach das System verschlüsseln oder die Homeverzeichnis-Verschlüsselung im Installer (auch bei manueller Partitionierung) aktivieren und keine extra Datenpartition zur Verschlüsselung - für speziell gewünschte Fälle ist dies jedoch möglich.
Achtung!
Alle bisherigen Daten auf dem betreffenden Gerät gehen verloren! Der Datenträger muss vorher ausgehängt werden, da ansonsten die Partition unbrauchbar wird!
Zuerst den Anfang der zu verschlüsselnden Partition mit Zufallsbytes überschreiben:
sudo dd if=/dev/urandom bs=1M count=8 of=GERÄTEDATEI
Hinweis:
GERÄTEDATEI
kann statt etwa einer Partition auch eine gewöhnliche Datei sein, welche dann als Container (Image) ebenfalls in den weiteren Schritten verschlüsselt, mit einem Dateisystem formatiert wird und danach geöffnet und mit beliebigen Dateien befüllt werden kann. Dazu gibt man an dieser Stelle fürcount
die gewünschte Größe in MiB an.Experten-Info:
Bei sehr großen Containerdateien können sehr große
bs
-Werte wie200M
beicount=1
je nach System die Erzeugung der Datei in der gewünschten Größe stark beschleunigen. In diesem Beispiel wäre die Datei 200 * 1 = 200 MiB groß. Alternativ beschleunigt auch die Verwendung vonif=/dev/zero
durch Nullen anstelle von Zufallszahlen wie beiurandom
. Um einen Container von 1000 GiB anzulegen, welcher nicht erst mehrere Stunden überschrieben wird (dadurch unter Umständen unsicherer), sondern sofort verfügbar ist, eignet sich der Befehlfallocate -l 1000G DATEI
. Soll dagegen die Datei zwar sofort 1000 GiB Platz bieten und als Platzverbrauch (mit ls) anzeigen, aber erst tatsächlich wachsen und Platz belegen (mit df überprüfbar), wenn der Container auch tatsächlich gefüllt wird, so eignet sich der Befehltruncate -s 1000G DATEI
.Danach die Partition verschlüsseln:
sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y GERÄTEDATEI
Dieser Befehl erstellt eine verschlüsselte Partition im Gerät
GERÄTEDATEI
. Der Parameter-c
bestimmt den Algorithmus,-y
lässt cryptsetup das Passwort zweimal abfragen (was in Verbindung mit Key-Files sinnlos wäre) und-s
bestimmt die Länge des Schlüssels.luksFormat
legt fest, dass der Header nach dem LUKS-Standard erstellt wird. Zur Sicherheitsbestätigung wird die Eingabe von YES gefordert. Also wirklich YES in Großbuchstaben (engl. uppercase) und nicht y, Y oder yes.Experten-Info:
XTS unterstützt Verwaltungsschlüssel von 128 oder 256 Bit. 512 heißt in dem Fall, dass sowohl AES als auch XTS die maximale Schlüssellänge von 256 Bit verwenden.
Um eine höhere Lese-/Schreibgeschwindigkeit zu erzielen, kann auch stattdessen 256 eingesetzt werden - das entspricht einer 128 Bit Verschlüsselung. Dies ist z.B. für langsamere Systeme empfehlenswert. Einen Anhaltspunkt über die Verschlüsselungsleistung des Systems liefert
cryptsetup benchmark
.Alternativ zu AES ist es möglich, den Verschlüsselungsalgorithmus Twofish oder Serpent zu verwenden. Dazu wird
aes-xts-plain64
durchtwofish-xts-plain64
bzw.serpent-xts-plain64
ersetzt.Zuweisung der verschlüsselten Partition einem virtuellen Gerät (nach Passworteingabe wird eine Gerätedatei /dev/mapper/usb-crypt angelegt, über die der verschlüsselte Inhalt zugänglich ist):
sudo cryptsetup luksOpen GERÄTEDATEI usb-crypt
Die Partition steht jetzt unter dem virtuellen Gerät /dev/mapper/usb-crypt zur Verfügung und kann mit einem Dateisystem beschrieben werden (z.B. ext4):
sudo mkfs.ext4 /dev/mapper/usb-crypt
Hinweis:
Bei einem System mit Intel QAT (QuickAssist-Technik unter anderem zur Performance-Verbesserung von Verschlüsselungen) kam es zu Abstürzen und Hängern. Abhilfe: QAT im Bios deaktivieren. Siehe: Details im Forum
Optional kann dem Dateisystem ein Label zugewiesen werden, das beim späteren Einhängen der Partition mithilfe der GUI des Systems automatisch als Name verwendet wird (
LABEL
durch eine eindeutige Bezeichnung ersetzen):sudo tune2fs -L LABEL /dev/mapper/usb-crypt
oder:
sudo e2label /dev/mapper/usb-crypt LABEL
Nun kann man sie ganz normal einhängen:
sudo mount /dev/mapper/usb-crypt /mnt
Neu angelegte Linux-Dateisysteme gehören erst einmal ausschließlich root. Wenn es für den regulären Benutzer gedacht ist, sind die Rechte mit chown anzupassen:
sudo chown $USER:$USER /mnt
Das Aushängen und Beenden der Verschlüsselung funktioniert dann in folgenden Schritten:
sudo umount /mnt
und Freigabe des virtuellen Gerätes:
sudo cryptsetup luksClose usb-crypt
Informationen zu verschlüsselten Partitionen abfragen¶
Möchte man Informationen über eine verschlüsselte Partition, kann folgender Befehl verwendet werden:
sudo cryptsetup luksDump /dev/sde9
Eine ausführliche Info über ein Dateisystem läßt sich mit folgender Eingabe anzeigen:
sudo dumpe2fs -h /dev/mapper/usb-crypt
oder alternativ:
sudo tune2fs -l /dev/mapper/usb-crypt
Eine Auflistung aller Blockgeräten im Baumformat:
lsblk
Öffnen von LUKS-Geräten mit Passwortabfrage¶
Nach der Anmeldung kann man LUKS-Geräte über die Kommandozeile einhängen und aushängen, wie es oben beschrieben ist (luksOpen, mount, umount, luksClose
). Beispiel: Ein per
sudo cryptsetup luksOpen /dev/sdXY mnt
geöffnetes LUKS-Gerät /dev/sdXY (XY passend auswählen, z.B. /dev/sda2) ist danach in /dev/mapper/mnt entschlüsselt und im Falle einer Partition (anstatt LVM) von dort aus direkt mountbar:
sudo mount /dev/mapper/mnt /mnt
Danach ist der Inhalt im Verzeichnis /mnt entschlüsselt.
Leider ist es ziemlich umständlich und man braucht Root-Rechte dazu.
LUKS-Geräte können aber in GUI komfortabel per Maus-Klick eingebunden werden. Das Passwort kann dabei im Falle von GNOME im Schlüsselbund, bei KDE in der KDE Brieftasche hinterlegt werden, sodass LUKS-Geräte ohne extra Abfrage eingehängt werden können.
Unter GNOME kann man LUKS-Geräte mittels des GVFS (Gnome Virtual File System) einbinden. Das Einbinden ins GVFS erfolgt entweder über einen Dateimanager (z. B. Nautilus, Thunar oder PCManFM), über das graphische Tool Gigolo oder über die Kommandozeile mit dem Befehl gvfs-mount
. Hierzu sind keine Root-Rechte und kein Eintrag in /etc/fstab erforderlich, und es muss auch nirgends ein SUID-Bit gesetzt werden. Die so eingebundenen LUKS-Geräte lassen sich auch ohne Root-Rechte wieder aushängen. Mehr dazu s. im Artikel gio mount
Öffnen von LUKS-Geräten beim Start ohne Passwortabfrage¶
Es gibt drei mehr oder minder geeignete Varianten zum Öffnen von LUKS-Geräten beim Start ohne extra Passworteingabe.
LVM¶
Es ist möglich, eine große Partition mit LUKS zu verschlüsseln und in dieser ein LVM-Gerät anzulegen. In diesem können beliebig viele logische Partitionen erstellt werden, die alle mittels einer Passworteingabe freigeschaltet werden.
Der Einrichtungsvorgang bei einer Neuinstallation ist im Artikel System verschlüsseln beschrieben.
Schlüsselableitung¶
Seit Ubuntu 8.04 gibt es das sogenannte Decrypted-Derived-Script, das den Schlüssel aus einem bereits geöffneten LUKS-Gerät berechnen kann. Mit diesem können nach der Freischaltung des Ursprungsgeräts beliebig viele geöffnet werden.
Auf die generelle Verwendung geht der Artikel LUKS/Schlüsselableitung und auf den Einrichtungsvorgang bei einer Neuinstallation System verschlüsseln/Schlüsselableitung ein.
Schlüsseldatei¶
Des Weiteren ist es möglich, LUKS-Geräte mit einer Schlüsseldatei zu öffnen. Da diese jedoch das Passwort im Klartext enthält, wird von dieser Variante abgeraten. Dabei kann man sich an der Ableitung von Schlüsseln in Bestehendes LUKS-Gerät sowie dem Öffnen im Abschnitt Manuell orientieren. Das Öffnen lässt sich z.B. in der Datei /etc/crypttab beim Systemstart erledigen.
Bei der Anmeldung¶
Außerdem ist es möglich, mittels eines extra PAM-Plugins ein LUKS-Gerät automatisch beim Login einzuhängen, wenn einer der LUKS-Schlüssel identisch mit dem Anmeldepasswort ist. Die Anleitung dazu würde den Rahmen dieses Artikels sprengen, es ist aber am Beispiel der Home-Partition hier beschrieben.
Schließen¶
Sobald das enthaltene Dateisystem nicht mehr eingehängt ist oder anderweitig verwendet wird, kann das LUKS-Gerät wie folgt geschlossen werden:
sudo cryptsetup luksClose MapperDatei