SDB:Sicherheit Verschlüsselung mit LUKS
Getestet mit openSUSE | Empfohlene Artikel | Verwandte Artikel | |||
|
|
Inhaltsverzeichnis
- 1 Einführung
- 2 Vorbereitende Maßnahmen
- 3 Erstellen eines verschlüsselten Containers / einer verschlüsselten Partition
- 3.1 Schritt 1: Erstellen eines Containers
- 3.2 Schritt 2: Füllen der ersten zwei Megabyte mit Zufallszahlen
- 3.3 Schritt 3: LUKS-Formatierung
- 3.4 Schritt 4: Öffnen des LUKS-Volumens
- 3.5 Schritt 5: Füllen des LUKS-Volumens mit Zufallszahlen aus /dev/zero
- 3.6 Schritt 6: Anlegen des Dateisystems
- 3.7 Ein Volumen schließen/öffnen (und die Containerdatei aushängen/einhängen)
- 4 Wartung von LUKS-Volumen
- 5 Komfortfunktionen durch pam_mount
- 6 Weitere Sicherheitsmaßnahmen
- 7 Externe Links
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
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
- Erstellen einer Partition bzw. eines Containers.
- Formatieren der Partition / des Containers mit LUKS.
- Füllen der Partition / des Containers mit Zufallszahlen, um eine Rekonstruktion der Daten zu erschweren.
- Formatieren der Partition / des Containers mit einem "richtigen" Dateisystem.
- Einbinden der Partition / des Containers in das System.
- 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
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.
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.
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
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
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
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
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.
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.
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
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.