SDB:Sicherheit Verschlüsselung mit LUKS

Wechseln zu: Navigation, Suche
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, das 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 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 /var/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 /var/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=/var/tmp/container.img bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.122607 s, 855 MB/s

Mit dd können Sie Dateien konvertieren und kopieren. if gibt die Eingabedatei an, hier /dev/zero, of die Ausgabedatei, hier /var/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 /var/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 records in
4000+0 records out
2048000 bytes (2.0 MB, 2.0 MiB) copied, 0.0501521 s, 40.8 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 -M luks2 -c aes-xts-plain64 -s 512 --label Geheim /dev/loop0

WARNING!
========
This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /var/tmp/container.img: 
Verify passphrase: 
Key slot 0 created.
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 oder mit cryptsetup --help)

  • 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.
  • -M gibt den Metadatentyp an, hier LUKS2.
  • -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.
  • --label ist eine für Menschen lesbare, frei wählbare Beschriftung.


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 -v /dev/loop0 geheim
Enter passphrase for /var/tmp/container.img: 
Key slot 0 unlocked.
Command successful.
Bei einer Partition ersetzen Sie /dev/loop0 durch /dev/sda7, bzw. die Gerätedatei ihrer Partition.

Mit der Aktion luksOpen öffnet cryptsetup ein LUKS-Volumen. Der erste Parameter -v sorgt für mehr Gesprächigkeit des Befehls, der zweit Parameter gibt das Volumen an, hier /dev/loop0, der drite 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: writing to '/dev/mapper/geheim': No space left on device
172033+0 records in
172032+0 records out
88080384 bytes (88 MB, 84 MiB) copied, 1.42444 s, 61.8 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, dies 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 Dateisystem ext4. Sie können aber auch ein beliebiges anderes Dateisystem verwenden.

Das Dateisystem wird mit dem Kommando mkfs.ext4 angelegt, diesem wird als Parameter der Ort übergeben, an dem das Dateisystem angelegt werden soll, in unserem Beispiel das eingebundene LUKS-Volumen unter /dev/mapper/geheim. Wenn Sie ihr Volumen anders genannt haben, müssen Sie diesen Parameter anpassen. Mit dem Parameter -L können Sie optional eine für Menschen lesbare Beschriftung angeben.

root# mkfs.ext4 -L Geheim /dev/mapper/geheim
mke2fs 1.46.1 (9-Feb-2021)
Creating filesystem with 86016 1k blocks and 21560 inodes
Filesystem UUID: 47379f0b-c281-408c-b7e6-135146d367b6
Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

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 Aktion 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 eingebunden (mount) haben, müssen Sie sie vorher ausbinden (umount). 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 /var/tmp/container.img
root# cryptsetup luksOpen -v /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 recht 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 Aktionen müssen auf ein ausgehängtes 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 /var/tmp/container.img
root# cryptsetup luksDump /dev/loop0
LUKS header information
Version:        2
Epoch:          3
Metadata area:  16384 [bytes]
Keyslots area:  16744448 [bytes]
UUID:           ec571542-3979-4243-b11c-50e867d3e022
Label:          Geheim
Subsystem:      (no subsystem)
Flags:          (no flags)

Data segments:
  0: crypt
        offset: 16777216 [bytes]
        length: (whole device)
        cipher: aes-xts-plain64
        sector: 512 [bytes]

Keyslots:
  0: luks2
        Key:        512 bits
        Priority:   normal
        Cipher:     aes-xts-plain64
        Cipher key: 512 bits
        PBKDF:      argon2i
        Time cost:  4
        Memory:     1048576
        Threads:    4
        Salt:       ab ec 74 5b 53 18 7e 60 ea 68 0c 94 d6 5e 0c 8c 
                    cf dc 91 ba 24 b4 ed e7 63 b0 b0 51 97 af 2f 42 
        AF stripes: 4000
        AF hash:    sha256
        Area offset:32768 [bytes]
        Area length:258048 [bytes]
        Digest ID:  0
Tokens:
Digests:
  0: pbkdf2
        Hash:       sha256
        Iterations: 90394
        Salt:       7e 48 10 27 32 b6 ad 6b 52 0d 38 7b f7 8c 5d 86 
                    cd 7b fc a0 ed 9b 96 53 eb 17 58 78 17 46 fe 0b 
        Digest:     dc 2c 7c be bd e3 11 08 04 e5 64 fd 47 63 b4 06 
                    33 e4 d7 4f 38 84 cf 65 32 8f 36 31 6f 38 2a e3
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-Aktion 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 /var/tmp/container.img
root# cryptsetup luksAddKey -v /dev/loop0 --key-slot 1
Enter any existing passphrase: 
Key slot 0 unlocked.
Enter new passphrase for key slot: 
Verify passphrase: 
Key slot 1 created.
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 /var/tmp/container.img
root# cryptsetup luksKillSlot -v /dev/loop0 1
Keyslot 1 is selected for deletion.
Enter any remaining passphrase: 
Key slot 0 unlocked.
Key slot 1 removed.
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 Ext4 oder Btrfs 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 Ext4-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 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 /var/tmp/container.img /mnt
Password:

Einhängen einer Partition

root# mount.crypt /dev/sda7 /mnt/geheim
Password:

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


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. Dort konfigurieren Sie die Volumen, 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 Fehlerfall 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

<debug enable="0" />

in

<debug enable="1" />


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 path="/var/tmp/container.img" mountpoint="/mnt/geheim" cipher="aes-xts-plain64:sha256" />

ein; für eine Partition nehmen Sie

<volume path="/dev/sda7" mountpoint="/mnt/geheim" cipher="aes-xts-plain64:sha256" />

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. pam_mount bietet noch weitere Optionen die Sie sich mit man pam_mount.conf anzeigen lassen können.

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 sind für die meisten Nutzer login, gdm und sddm am interessantesten. login regelt die Anmeldung im Textmodus, gdm die Anmeldung mit GDM, sddm die Anmeldung mittels SDDM usw. Fügen Sie den beiden Dateien am jeweils am Ende der Abschnitte für auth und sesssion die folgenden Zeilen hinzu (weitere Informationen liefer auch man pam_mount):

auth     optional       pam_mount.so
session [success=1 default=ignore] pam_succeed_if.so service = system-user
session  optional       pam_mount.so

Komplette Beispielkonfiguration für SDDM

#%PAM-1.0
auth     include        common-auth
auth     optional       pam_mount.so
auth     optional       pam_kwallet5.so
account  include        common-account
password include        common-password
session  required       pam_loginuid.so
session  include        common-session
session  optional       pam_keyinit.so force revoke
session [success=1 default=ignore] pam_succeed_if.so service = system-user
session  optional       pam_mount.so
session  optional       pam_kwallet5.so auto_start

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 nur ein Modul 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.


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