SDB:Sicherheit Verschlüsselung mit LUKS

Wechseln zu: Navigation, Suche
Icon-cleanup.png Dieser Artikel/Abschnitt benötigt Aufmerksamkeit!
Mehr Informationen sollten auf der Diskussionsseite des Artikels zu finden sein.
Die hier aufgeführten Informationen beschreiben das vorgehen beim verschlüsseln von Festplatten, Verzeichnissen und Daten.
Getestet mit openSUSE Empfohlene Artikel Verwandte Artikel
Icon-checked.png

Icon-manual.png Icon-help.png


Einführung

Will man verhindern, dass Daten nicht in falsche Hände gelangen, bspw. durch den Diebstahl eines Notebooks, so ist man darauf angewiesen, wichtige Daten zu verschlüsseln, um sie vor unbefugtem Zugriff zu schützen. Man kann Daten mit Hilfe von Werkzeugen wie GPG auf Dateiebene verschlüsseln, was recht einfach ist, auf Dauer aber auch sehr unbequem, da man die Daten vor der Nutzung manuell entschlüsseln und danach wieder verschlüsseln muss. Komfortabler ist eine transparente Verschlüsselung, die vom Nutzer unbemerkt auf Treiber-Ebene arbeitet, und Daten automatisch ver- und entschlüsselt, nachdem sich der Benutzer ein mal als berechtigt ausgewiesen hat.

Unter Linux steht mit der dm-crypt-Erweiterung LUKS ein Werkzeug bereit, dass genau diesen Ansatz verfolgt. dm-crypt ist ein Modul des Linux Device Mapper, einer flexiblen Virtualisierungsschicht, die es erlaubt, physische und logische Blockgeräte (wie Festplatten und Partitionen) durch eine so genannte Map Table auf virtuelle Blockgeräte mit neuen Eigenschaften abzubilden. LUKS steht dabei für Linux Unified Key Setup und stellt einen Satz aus Werkzeugen und Methoden bereit, mit dem sich verschlüsselte Partitionen und Container relativ bequem Einrichten und Nutzen lassen.

LUKS erweitert die verschlüsselte Partition oder die verschlüsselte Container-Datei um einen Header, in welchem sich Informationen zur Verschlüsselung und die Schlüssel zum Entschlüsseln in verschlüsselter Form befinden. Der Header bietet Platz für acht Schlüssel, die einzelnen Plätze werden dabei als Slots bezeichnet. Der Vorteil dabei ist, dass Sie für ein verschlüsseltes Objekt acht Schlüssel, sprich Passwörter, definieren können, die Sie bspw. an acht Nutzer verteilen können. Jeder Nutzer kann dabei sein eigenes Passwort verwenden, ohne von den Passwörtern der anderen Nutzer wissen zu müssen.

In der folgenden Anleitung wird gezeigt, wie Sie eine Partition oder einen Container mit LUKS verschlüsseln können und wie Sie sie nutzen, verwalten und automatisch einbinden lassen können. Ein Container ist eine einzelne Datei, die in das Dateisystem eingebunden wird, ähnlich wie Sie eine Partition einbinden, nur das der Container selber auf einer Partition liegt.


Vorbereitende Maßnahmen

Warnung!Wenn Sie keine Erfahrung mit dem Anlegen von Partitionen und dergleichen haben, dann sollten Sie vorher alle wichtigen Daten sichern, bevor Sie sie durch einen Fehler in den digitalen Orkus schicken! Außerdem sollten Sie erste Erfahrungen mit einem Container sammeln, und mit ihm die Schritte durchspielen.

Voraussetzungen

  • Das Paket cryptsetup muss installiert sein, es enthält die notwendigen Werkzeuge für LUKS.
  • Das Paket pam_mount enthält weitere Werkzeuge, die den Umgang mit LUKS komfortabler machen, Sie sollten es ebenfalls installieren
  • Sie benötigen genügend freien Platz auf ihrer Festplatte für einen Container oder eine leere Partition. Auf der Partition werden alle Daten überschrieben werden.

Arbeitsablauf

  1. Erstellen einer Partition bzw. eines Containers.
  2. Formatieren der Partition / des Containers mit LUKS.
  3. Füllen der Partition / des Containers mit Zufallszahlen, um eine Rekonstruktion der Daten zu erschweren.
  4. Formatieren der Partition / des Containers mit einem "richtigen" Dateisystem.
  5. Einbinden der Partition / des Containers in das System.
  6. Komfortfunktionen

Annahmen

Wir werden in dieser Anleitung sowohl einen verschlüsselten Container erstellen, als auch eine Partition verschlüsseln. Dabei gehen wir von den folgenden Beispielen aus, die Sie natürlich für ihre eigene Bedürfnisse anpassen müssen.

  • Die Containerdatei erstellen wir unter /tmp als container.img. Der Name ist natürlich frei wählbar.
  • Als Partition nehmen wir in den Beispielen /dev/sda7. Diesen Wert müssen Sie ebenfalls an ihre Umgebung anpassen.
  • Als Mount-Punkt, an dem das verschlüsselte Volumen endgültig ins System eingehängt wird, nehmen wir hier /mnt/geheim. Sie können diesen natürlich an ihre Bedürfnisse anpassen.
  • Sie benötigen für die Aufgaben root-Rechte!


Erstellen eines verschlüsselten Containers / einer verschlüsselten Partition

Sie können für LUKS-Volumen sowohl Container als auch Partitionen verwenden. Ein Container ist dabei eine Datei, die sich auf einer Partition befindet und in das Dateisystem wie eine Partition eingebunden wird. Diese Anleitung geht auf beide Typen ein. Sie unterscheiden sich meist nur in den Details und im ersten und letzten Schritt.

Beim Erstellen sollten Sie sowohl Container als auch Partitionen komplett mit Zufallszahlen füllen. Würden Sie sie nur mit Nullen füllen, ließen sich Sektoren, die Informationen enthalten, sehr leicht erkennen. Um Zufallszahlen zu generieren, gibt es verschiedene Methoden: /dev/random und /dev/urandom liefern direkt Zufallszahlen. Der Unterschied und die Funktion dieser Pseudogeräte wird hier in der Wikipedia erklärt. Außerdem lässt sich /dev/zero verwenden, das eigentlich keine Zufallszahlen generiert; werden die Nullen aber in eine verschlüsselte Partition geschrieben, dann lassen sie sich von "echten" Zufallszahlen nicht unterscheiden. Die sicherste aber auch langsamste Methode ist /dev/random, gefolgt von /dev/urandom, das etwas schneller, aber auch etwas weniger sicher ist. An letzter Stelle in dieser Liste kommt dann /dev/zero. In dieser Anleitung werden die Verfahren kombiniert, um einen bestmöglichen Kompromiss aus Sicherheit und Geschwindigkeit zu erreichen. Wenn Sie massig Zeit haben, dann können Sie natürlich auch immer /dev/random nutzen. ;-)


Schritt 1: Erstellen eines Containers

Die folgenden Schritte brauchen Sie nur, wenn Sie mit einem Container arbeiten. Wenn Sie eine Partition verschlüsseln wollen, können Sie gleich bei Schritt zwei weiter lesen.

Unter /tmp erstellen Sie mit dd eine Containerdatei von 100MB Größe. Die Größe können Sie natürlich frei anpassen.

root# dd if=/dev/zero of=/tmp/container.img bs=1M count=100 100+0 Datensätze ein 100+0 Datensätze aus 104857600 Bytes (105 MB) kopiert, 2,3398 s, 44,8 MB/s


Mit dd können Sie Dateien konvertieren und kopieren. if gibt die Eingabedatei an, hier /dev/zero, of die Ausgabedatei, hier /tmp/container.img. bs gibt an, wie viele Bytes auf ein Mal kopiert werden sollen, hier 1 Megabyte. count gibt an, wie viele Blöcke kopiert werden sollen, hier 100. Wir kopieren also 100 1-Megabyte-Blöcke voller Nullen aus /dev/zero in die Datei container.img. Würden Sie count nicht angeben, würde so lange kopiert, bis kein Platz mehr vorhanden ist. Wollen Sie einen größeren Container erstellen, müssen Sie den Wert von count anpassen.

Nun binden wir den Container mit losetup in das Dateisystem ein, um ihn formatieren zu können.

root# losetup /dev/loop0 /tmp/container.img


Der Container ist nun unter /dev/loop0 im Dateisystem eingebunden.


Schritt 2: Füllen der ersten zwei Megabyte mit Zufallszahlen

Wie schon einleitend erwähnt, kann man auf verschiedenen Wegen an Zufallszahlen gelangen. In den ersten beiden Megabyte wird der LUKS-Header gespeichert. Es würde sich hier also lohnen, die Zufallszahlen aus /dev/random zu verwenden, was allerdings sehr sehr lange dauert, weshalb wir hier /dev/urandom verwenden. Auch hier kommt wieder dd zum Einsatz, diesmal mit einer Blockgröße von 512 Byte, wobei 4000 Blöcke übertragen werden.

root# dd if=/dev/urandom of=/dev/loop0 bs=512 count=4000 4000+0 Datensätze ein 4000+0 Datensätze aus 2048000 Bytes (2,0 MB) kopiert, 0,558688 s, 3,7 MB/s


Bei einer Partition ersetzen Sie of=/dev/loop0 durch of=/dev/sda7, bzw. die Gerätedatei ihrer Partition.


Wenn Sie wollen, können Sie auch gleich das gesamte Objekt mit Zufallszahlen aus /dev/urandom füllen. Sie müssen dafür nur count=4000 weg lassen, dann wird das ganze Objekt mit Zufallszahlen gefüllt. Je nach Größe kann dies aber bis zu mehrere Stunden in Anspruch nehmen. Wenn Sie sich dafür entscheiden, können Sie den fünften Schritt weg lassen.

Schritt 3: LUKS-Formatierung

Nun geht es daran, dass Objekt mit LUKS zu formatieren. Dabei wird der LUKS-Header an den Anfang der Partition bzw. des Containers geschrieben. Hier geben Sie auch das erste Passwort an! Hierfür muss das Paket cryptsetup installiert sein, welches die notwendigen Werkzeuge enthält. Das Formatieren wird mit dem Befehl cryptsetup durchgeführt, dem die nötigen Parameter übergeben werden.

root# cryptsetup luksFormat -v -y -c aes-xts-plain64 -s 512 /dev/loop0

WARNING!

This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.


Bei einer Partition ersetzen Sie /dev/loop0 durch /dev/sda7, bzw. die Gerätedatei ihrer Partition.


Erklärung der verwendeten Parameter: (weitere Erklärungen finden Sie in man cryptsetup)

  • luksFormat ist die LUKS-Aktion zum Formatieren.
  • -v zeigt im Fall eines Fehlers detailliertere Meldungen an.
  • -y sorgt dafür, dass das Passwort sicherheitshalber zwei Mal abgefragt wird.
  • -s gibt die Größe des Schlüssels in Bit an, hier 512 Bit.
  • -c setzt die Verschlüsselungsparameter:
    • aes ist der genutzte Verschlüsselungsalgorithmus.
    • xts ist der genutzter Block-Modus.
    • plain64 ist der genutzte Initialisierungsvektor-Modus.

Schritt 4: Öffnen des LUKS-Volumens

Sie haben nun ein mit LUKS formatiertes Volumen, welches aber noch kein Dateisystem enthält und eventuell nur mit Nullen gefüllt ist (wenn Sie bei Schritt 2 nur die ersten beiden Megabyte mit Zufallszahlen gefüllt haben). Um das LUKS-Volumen weiter zu bearbeiten, müssen Sie es öffnen. Wenn ein LUKS-Volumen geöffnet wird, wird es vom Device Mapper unter /dev/mapper eingebunden. Zum Öffnen verwenden Sie wieder cryptsetup mit einem LUKS-Parameter und geben dann das vorher festgelegte Passwort ein.

root# cryptsetup luksOpen /dev/loop0 geheim Enter LUKS passphrase: key slot 0 unlocked. Command successful.


Bei einer Partition ersetzen Sie /dev/loop0 durch /dev/sda7, bzw. die Gerätedatei ihrer Partition.


Mit der Option luksOpen öffnet cryptsetup ein LUKS-Volumen. Der dritte Parameter gibt das Volumen an, hier /dev/loop0, der vierte Parameter legt den Namen für das eingehängte Volumen fest, hier geheim. Unter diesem Namen wird das Volumen dann unter /dev/mapper vom Device Mapper eingehängt, hier also unter /dev/mapper/geheim.

Schritt 5: Füllen des LUKS-Volumens mit Zufallszahlen aus /dev/zero

Wenn Sie in Schritt 2 schon das gesamte Volumen mit Zufallszahlen aus /dev/urandom oder /dev/random gefüllt haben, können Sie diesen Schritt überspringen und bei Schritt 6 weiter machen.

Da das Befüllen des Volumens mit Zufallszahlen aus /dev/urandom oder gar /dev/random bei großen Volumen sehr lange dauert, greifen wir zu einem kleinen Trick. Wir füllen das eingehängte Volumen mit Nullen aus /dev/zero, die sich durch die Verschlüsselung kaum von Zufallszahlen unterscheiden und es so erschweren, genutzte Sektoren zu erkennen. Dafür nutzen wir wieder das Kommando dd, welches die aus /dev/zero stammenden Nullen in das unter /dev/mapper/geheim eingehängte Volumen schreibt. (Wenn Sie einen anderen Namen für das Volumen gewählt haben, dann müssen Sie dies anpassen.)

root# dd if=/dev/zero of=/dev/mapper/geheim dd: Schreiben in „/dev/mapper/geheim“: Auf dem Gerät ist kein Speicherplatz mehr verfügbar 202745+0 Datensätze ein 202744+0 Datensätze aus 103804928 Bytes (104 MB) kopiert, 9,93495 s, 10,4 MB/s


Die Meldung, dass auf dem Gerät kein Speicherplatz mehr ist, ist normal. Sie haben es randvoll mit Zufallszahlen gefüllt.

Schritt 6: Anlegen des Dateisystems

Sie haben das Volumen zwar mit LUKS formatiert, die beinhaltet aber kein Dateisystem, sondern nur den LUKS-Header. Um das Volumen richtig nutzen zu können, müssen Sie noch ein richtiges Dateisystem anlegen. In diesem Beispiel verwenden wir das Standarddateisystem von openSUSE: ext3. Sie können aber auch ein beliebiges anderes Dateisystem wie ReiserFS verwenden.

Das Dateisystem wird mit dem Kommando mkfs.ext3 angelegt, diesem wird als Parameter der Ort übergeben, an dem das Dateisystem angelegt werden soll, in unsere, Beispiel das eingebundene LUKS-Volumen unter /dev/mapper/geheim. Wenn Sie ihr Volumen anders genannt haben, müssen Sie diesen Parameter anpassen.

root# mkfs.ext3 /dev/mapper/geheim mke2fs 1.40.8 (13-Mar-2008) Dateisystem-Label= OS-Typ: Linux Blockgröße=1024 (log=0) Fragmentgröße=1024 (log=0) 25376 Inodes, 101372 Blöcke 5068 Blöcke (5.00%) reserviert für den Superuser Erster Datenblock=1 Maximale Dateisystem-Blöcke=67371008 13 Blockgruppen 8192 Blöcke pro Gruppe, 8192 Fragmente pro Gruppe 1952 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 8193, 24577, 40961, 57345, 73729 Schreibe Inode-Tabellen: erledigt Erstelle Journal (4096 Blöcke): erledigt Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt Das Dateisystem wird automatisch alle 32 Mounts bzw. alle 180 Tage überprüft, je nachdem, was zuerst eintritt. Veränderbar mit tune2fs -c oder -t .


Sie haben nun ein über LUKS verschlüsseltes Dateisystem, welches Sie bspw. mit mount /dev/mapper/geheim /mnt/geheim unter /mnt/geheim in ihr System einbinden können, und das ihnen so eine transparente Ver- und Entschlüsselung der darin enthaltenen Daten liefert.


Ein Volumen schließen/öffnen (und die Containerdatei aushängen/einhängen)

So lange ein verschlüsseltes Volumen in das System eingehängt ist, ist es je nach Berechtigung für alle Systemnutzer les- und schreibbar. Mit der Option luksClose können Sie geöffnete Volumen mit cryptsetup schließen. Diese dürfen dabei nicht mehr im Dateisystem eingehängt sein. Wenn Sie sie also gemountet haben, müssen Sie sie vorher unmounten. Containerdateien lassen sich mit losetup -d aus dem System aushängen, nachdem Sie vorher geschlossen wurden. Der Vorgang für eine Containerdatei sähe dann so aus:

root# umount /mnt/geheim root# cryptsetup luksClose geheim root# losetup -d /dev/loop0


Bei einer Partition brauchen Sie das Kommando losetup -d nicht.


Um das Volumen ins System einzubinden sind dann die folgenden Schritte notwendig:

root# losetup /dev/loop0 /tmp/container.img root# cryptsetup luksOpen /dev/loop0 geheim Enter LUKS passphrase: key slot 0 unlocked. Command successful. root# mount /dev/mapper/geheim /mnt/geheim


Bei einer Partition brauchen Sie das Kommando losetup nicht. Zusätzlich müssen Sie bei cryptsetup luksOpen den Gerätepfad anpassen.


Sie sehen schon, dass ist rech viel Tipparbeit. Das Paket pam_mount enthält Werkzeuge, mit denen sich LUKS-Volumen komfortabler ein- und ausbinden lassen. Mehr dazu erfahren Sie im Abschnitt Mehr Komfort durch pam_mount.

Wartung von LUKS-Volumen

cryptsetup bietet weitere Funktionen an, um LUKS-Volumen zu warten. Sie können so bspw. weitere Schlüssel hinzufügen (maximal acht) und löschen oder sich Informationen über das Volumen anzeigen lassen. Dafür benötigen Sie Root-Rechte. Die Vorgänge müssen auf eine ausgehängte LUKS-Volumen angewendet werden, Containerdateien müssen allerdings über /dev/loop* eingehängt sein. Hier werden die wichtigsten Optionen vorgestellt, weitere Informationen dazu finden Sie in der man-Seite von cryptsetup.

luksDump - Informationen über LUKS-Volumen anzeigen lassen

Mit der Option luksDump können Sie sich Informationen über ein LUKS-Volumen anzeigen lassen. Container müssen vorher über losetup eingehängt werden.

root# losetup /dev/loop0 /tmp/container.img root# cryptsetup luksDump /dev/loop0 LUKS header information for /dev/loop0 Version: 1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Hash spec: sha1 Payload offset: 2056 MK bits: 256 MK digest: 45 54 19 9d c1 ed b9 12 d4 4b 53 84 b4 5f 56 8b a5 b7 29 47 MK salt: 72 9e 7d 17 4e fd 97 e1 f8 ab b4 69 f3 bc 15 0f b5 15 c6 c5 cb 00 5b b8 da c6 d2 96 7f d1 80 42 MK iterations: 10 UUID: 9f323299-8464-4179-865e-b271e1784432 Key Slot 0: ENABLED Iterations: 209459 Salt: 54 f3 cb 47 48 3a 6d 54 16 e5 0e 87 3b f4 96 6a 8b b5 1b bc 33 15 8e 8d 79 89 6d 20 83 f4 c8 99 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
Container müssen vorher über losetup eingehängt werden. Auf Partitionen können Sie direkt über die Gerätedatei zugreifen.


luksAddKey - Einen Schlüssel zum LUKS-Volumen hinzufügen

Mit der cryptsetup-Option luksAddKey können Sie einem LUKS-Volumen weitere Schlüssel, sprich Passwörter, hinzufügen. Pro LUKS-Volumen können maximal acht Passwörter/Schlüssel festgelegt werden. Das bei der LUKS-Formatierung festgelegte Passwort befindet sich dabei immer in Slot 0. Mit dem Parameter --key-slot können Sie festlegen, in welchen Slot der Schlüssel eingefügt wird; ohne den Parameter wird der nächste freie genommen. Sie müssen dabei einen bereits existierenden Schlüssel/Passwort angeben.

root# losetup /dev/loop0 /tmp/container.img root# cryptsetup luksAddKey /dev/loop0 --key-slot 1 Enter any LUKS passphrase: key slot 0 unlocked. Enter new passphrase for key slot: Verify passphrase: Command successful.
Container müssen vorher über losetup eingehängt werden. Auf Partitionen können Sie direkt über die Gerätedatei zugreifen.


luksKillSlot - Einen Schlüssel vom LUKS-Volumen entfernen

luksKillSlot entfernt einen Schlüssel/ein Passwort von einem LUKS-Volumen. Sie müssen dabei den zu entfernenden Key Slot angeben und brauchen ein verbleibendes Passwort.

root# losetup /dev/loop0 /tmp/container.img
root# cryptsetup luksKillSlot /dev/loop0 1
Enter any remaining LUKS passphrase:
key slot 1 verified.
Command successful.

Container müssen vorher über losetup eingehängt werden. Auf Partitionen können Sie direkt über die Gerätedatei zugreifen.

Wartung des Dateisystems

Um das im LUKS-Volumen verwendete Dateisystem wie Ext3 oder ReiserFS mit den zugehörigen Werkzeugen zu warten, darf es, wie normale Dateisysteme auch, nicht komplett ins System eingebunden sein, sondern lediglich bis zur Device Mapper-Ebene, also unter /dev/mapper. Danach können Sie mit den Werkzeugen dort auf das Dateisystem zugreifen. Ein kleines Beispiel, wie Sie einem Ext3-Dateisystem auf einem LUKS-Volumen nachträglich Access Control Lists hinzufügen:

root# cryptsetup luksOpen /dev/sda7 sda7
root# tune2fs -o acl /dev/mapp/sda7
root# cryptsetup luksClose sda7

Container müssen vorher über losetup eingehängt werden. Auf Partitionen können Sie direkt über die Gerätedatei zugreifen.

Auch bei anderen Dateisystemoperationen wie einer Prüfung mittels fsck usw. müssen Sie so verfahren.

Komfortfunktionen durch pam_mount

pam_mount ist ein Modul für das Linux-PAM, mit dem sich bei der Anmeldung automatisch Partitionen ins System einhängen lassen. Es kann bspw. dazu genutzt werden, eine mit LUKS verschlüsselte HOME-Partition automatisch bei der Anmeldung des Benutzers in das System einzubinden. Dazu später noch mehr. Das Paket pam_mount enthält aber auch noch zwei sehr nützliche Skripte, die den Umgang mit LUKS-Volumen vereinfachen und komfortabler machen. Mit mount.crypt können Sie LUKS-Volumen mit einem Kommando einbinden, umount.crypt hängt sie dann wieder aus. Sie müssen dafür das Paket pam_mount installiert haben.

mount.crypt - Komfortables Einhängen von LUKS-Volumen

mount.crypt erledigt all die Schritte für Sie, die Sie beim Einhängen eines LUKS-Volumens sonst manuell durchführen müssten. Sie brauchen lediglich die Partition oder den Container angeben, ob es eines loop-Devices bedarf, und den Mount-Punkt festlegen. Nach dem Befehl folgt zuerst das einzuhängende Volumen, gefolgt vom Mount-Punkt, zum Schluss kommen eventuell nötige Optionen.

Einhängen einer Containerdatei

root# mount.crypt /tmp/container.img /mnt/geheim -o loop
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.

Bei einer Containerdatei müssen Sie die Option -o loop verwenden, damit diese Automatisch als loop-Device eingebunden wird.


Einhängen einer Partition

root# mount.crypt /dev/sda7 /mnt/geheim
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.


umount.crypt - Komfortables Aushängen von LUKS-Volumen

umount.crypt erledigt all die Schritte für Sie, die Sie beim Aushängen eines LUKS-Volumens sonst manuell durchführen müssten. Sie brauchen lediglich den Mount-Punkt angeben. Bei einer Containerdatei wird auch das loop-Device aus dem System ausgehängt.

root# umount.crypt /mnt/geheim

Version: 11.0Unter openSUSE 11.0 fehlt im Skript umount.crypt eine Variable namens LOSETUP, die eigentlich den Befehl losetup enthalten sollte. Dies führt dazu, dass über losetup eingehängte Container nicht aus /dev/loop* ausgehängt werden. Sie können dies beheben, indem Sie am Anfang von /sbin/umount.crypt etwa in Zeile 43 das folgende einfügen: LOSETUP="/sbin/losetup" Dieses Fehlverhalten ist mittlerweile durch eine Online-Aktualisierung behoben worden.


Automatisches Einhängen mit pam_mount

pam_mount ist ein Modul für die Pluggable Authentication Modules Softwarebibliothek, mit dem sich verschlüsselte Volumen (Partitionen, Container usw.) automatisch bei der Anmeldung eines Nutzers ins System einbinden lassen. pam_mount kann dazu das Anmeldepasswort verwenden oder ein zusätzliches Passwort abfragen. Am komfortabelsten ist es, das Nutzerpasswort direkt zur Entschlüsselung des Volumens weiterzugeben, dazu müssen Nutzerpasswort und LUKS-Passwort übereinstimmen. Wenn Sie also bspw. eine home-Partition automatisch bei der Anmeldung eines Nutzers einbinden wollen, dann müssen Sie bei LUKS das selbe Passwort wie für die "normale" Anwendung nutzen.

pam_mount speichert seine Konfiguration in der XML-Datei /etc/security/pam_mount.conf.xml. Die allgemeinen PAM-Konfigurationsdateien befinden sich unter /etc/pam.d, in ihnen müssen Sie angeben, welche PAM-Module pam_mount verwenden sollen.

Konfigurationsdatei pam_mount.conf.xml

Diese Datei finden Sie im Verzeichnis /etc/security. Sie müssen Sie für openSUSE etwas anpassen und dort auch ihre Volumen konfigurieren, die automatisch bei der Anmeldung eingebunden werden sollen.

Einschalten des Debug-Modus
Wenn Sie pam_mount das erste mal verwenden ist es sinnvoll, den Debug-Modus einzuschalten, um im Fehlerfalls mehr Informationen zu haben. Wenn alles reibungslos läuft, können Sie ihn auch wieder deaktivieren. Die Debug-Ausgabe sehen Sie nur, wenn Sie sich im Textmodus, also ohne grafische Oberfläche anmelden, was zum Testen verschmerzbar sein sollte. ;-) Um den Debugmodus zu aktivieren ändern Sie ungefähr in Zeile 18

<debug enable="0" />

in

<debug enable="1" />


Anpassung an openSUSE

Diese Anpassung ist ab openSUSE 11.1 nicht mehr nötig.

In der mit openSUSE mitgelieferten pam_mount.conf.xml müssen noch einige Befehle angepasst und hinzugefügt werden, ersetzen Sie dadurch ungefähr in Zeile 153

<cryptmount>mount -t crypt "%(ifnempty=\"-o\" OPTIONS)" %(OPTIONS)
        %(VOLUME) %(MNTPT)</cryptmount>

durch

<cryptmount>/sbin/mount.crypt %(VOLUME) %(MNTPT) "%(ifnempty=\"-o\" OPTIONS)" %(OPTIONS)</cryptm

und fügen Sie darunter noch

<cryptumount>/sbin/umount.crypt %(MNTPT)</cryptumount>

für das Ausbinden der verschlüsselten Volumen hinzu.


Konfiguration eines einzubindenen Volumens
Um ein Volumen automatisch einbinden zu lassen, müssen Sie pam_mount das einzubindende Volumen, den Mount-Punkt, also die Stelle, an der es eingebunden werden soll, und etwaige Optionen mitteilen. Fügen Sie dafür am Ende der Konfigurationsdatei, aber noch vor </pam_mount>, für eine Containerdatei

<volume fstype="crypt" path="/tmp/container.img" mountpoint="/mnt/geheim" options="loop" />

ein; für eine Partition nehmen Sie

<volume fstype="crypt" path="/dev/sda7" mountpoint="/mnt/geheim" />

Sie müssen die Konfiguration natürlich an ihre Umgebung anpassen. path gibt den Ort des einzubindenden Volumens an, mountpoint den Ort, an dem es ins Dateisystem eingebunden werden soll.

Konfiguration der PAM-Module

pam_mount selbst ist nun konfiguriert, sie müssen nun noch die genutzten Anmeldemodule so konfigurieren, dass Sie pam_mount mitnutzen. Die nötigen Konfigurationsdatein finden Sie im Verzeichnis /etc/pam.d, davon Sie für die meisten Nutzer login, gdm und xdm am interessantesten. login regelt die Anmeldung im Textmodus, gdm die Anmeldung mit GDM, xdm die Anmeldung mittels KDM usw. Fügen Sie den beiden Dateien am Ende die folgenden Zeilen hinzu:

Version: bis 11.1
auth     optional       pam_mount.so use_first_pass
session  optional       pam_mount.so use_first_pass

Version: ab 11.2
auth     optional       pam_mount.so
session  optional       pam_mount.so

Die hier gewählte Option use_first_pass sorgt dafür, dass pam_mount.so das erste erhaltene Passwort nutzt, um die Volumen einzubinden. Wenn Sie keine Option angeben fragt pam_mount.so immer nach einem Passwort. Ab openSUSE 11.2 hat sich dieses Verhalten geändert. pam_mount.so hat hier passende Standardeinstellungen und andere Optionen. Weitere Optionen für pam_mount.so finden Sie in der Datei /usr/share/doc/packages/pam_mount/options.txt. Vorsichtshalber könnten Sie auch zuerst eins der beiden Module umstellen, bspw. login, um sich weiterhin mit der alten Konfiguration grafisch anmelden zu können. So können Sie auf der Textkonsole sehen, ob alles funktioniert und haben etwaige Fehlermeldungen direkt vor Augen.

Automatisches Ausbinden nach der Abmeldung

Wenn Sie alles richtig konfiguriert haben, sollte das automatische Einbinden nun funktionieren. Damit das Volumen aber auch sicher ist, sollte es nach einer Abmeldung wieder aus dem System ausgehängt werden, damit keine anderen angemeldeten Nutzer darauf Zugriff haben. Dazu müssen Sie dafür sorgen, dass eine Sitzung nach der Abmeldung auch wieder geschlossen wird; dies können Sie in der Datei /etc/login.defs festlegen. Fügen Sie der Datei den folgenden Eintrag hinzu:

CLOSE_SESSIONS          yes

Testen der Konfiguration

Es sollte nun alles eingerichtet sein. Um ihre Konfiguration zu testen melden Sie sich am besten im Textmodus an ihrem System an, um etwaige Fehlermeldungen direkt sehen zu können. Wenn Sie in der /etc/security/pam_mount.conf.xml den Debug-Modus aktiviert haben, dann sollten Sie den Vorgang verfolgen können. Wenn die Anmeldung geklappt hat, dann melden Sie sich wieder ab und schauen Sie nach, ob das Volumen noch eingebunden ist, was nicht der Fall sein sollte.


Weitere Sicherheitsmaßnahmen

Sobald ein verschlüsseltes Volumen in das System eingebunden ist, ist es für alle Nutzer mit den nötigen Rechten verwendbar. Wenn Sie es also vor den Blicken anderer Nutzer schützen wollen, dann müssen Sie die Berechtigungen für die Verzeichnisse und Dateien entsprechend setzen. Am besten so, dass nur der Eigentümer darauf Zugriff hat. Der Benutzer root hat allerdings trotzdem noch Zugriff, ihn können Sie damit nicht ausschließen.

Allerdings kann der Benutzer root über pam_mount Volumen nicht automatisch einbinden, dies bleibt normalen Nutzern vorbehalten. An einem Einzelplatzrechner, wie ihn die meisten wohl benutzen werden, fällt dies allerdings nicht ins Gewicht, da root und Nutzer ein und die selbe reale Person sind.

Wenn Sie an ihrem Computer arbeiten, dann werden nicht nur in ihrem Heimatverzeichnis Daten verarbeitet und abgelegt, sondern auch unter /var, /tmp und auf der swap-Partition. Wenn Sie ihre Daten also wirklich komplett schützen wollen, müssen Sie das ganze System verschlüsseln. Diese weitergehende Konfiguration erklärt der Artikel Komplett verschlüsseltes System.


Externe Links