Cryptsetup - Mehrere verschlüsselte Partitionen mit Key-File auf USB-Stick

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiSicherheit ‹ Cryptsetup - Mehrere verschlüsselte Partitionen mit Key-File auf USB-Stick


Baustelle.png Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade.


Getestet.png Getestet: Dieser Hinweis soll dir dabei helfen, zu entscheiden, ob dieser Artikel auf deinem System funktionieren wird oder nicht. Solltest du feststellen, dass dieser Artikel bei einer ungetestet Version funktioniert, kannst du das gerne hier korrigieren oder im Forum anmerken.


Mit Cryptsetup (und LUKS) die root-Partition und weitere Partitionen verschlüsseln, beim Systemstart den Key von einem USB-Stick einlesen.

Debian

Einführung

In diesem Artikel soll es darum gehen, einen Rechner mit verschlüsselter root-Partition einzurichten sowie weitere Partitonen zu verschlüsseln. Alle Datenträger sollen während des Boot-Vorgangs mittels Key, der sich in einer Datei befindet, von einem USB-Stick entschlüsselt werden. Die verschlüsselten Partitionen behalten weiterhin auch eine Passphrase, um im Notfall trotzdem eine Entschlüsselung durchführen zu können.

Allgemeines

Mit cryptsetup können Datenträger verschlüsselt werden. Der Vorteil dieser Methode ist, man kann mehrere Keys (bis zu 8) pro Datenträger vergeben und so mehreren Leuten den Zugriff geben, ohne dass alle das selbe Passwort kennen müssen. Im Internet finden sich sehr viele Anleitungen zu dem Thema. Viele sind veraltet oder weisen unterschiedliche Vorgehensweisen auf. Man kann schwer mehrere Anleitungen miteinander kombinieren, wenn mal etwas nicht funktioniert wie beschrieben.

Anpassungen in Debian/Stretch haben den Vorgang des Entschlüsselns mit Key von USB-Stick verändert. Mittels Passphrase funktioniert es super. Durch das Zusammenspiel mit systemd gibt es aber Schwierigkeiten, wenn man den alten Anleitungen folgt. Hier findet man eine Beschreibung, wie man einen USB-Stick mit systemd nutzt. Es wird jedoch ein unpartitionierter Bereich am Anfang des Sticks als Key genutzt. Weiterhin beschreibt der Autor die Verwendung des systemd-Unitfile. Für diesen Artikel wird jedoch eine Datei auf einem USB-Stick als Key verwendet und systemd nicht weiter betrachtet. Folgende Punkte zeigen kurz, was vorhanden sein muss, bzw. konfiguriert wird:

  • unverschlüsseltes /dev/sda1, gemountet nach "/boot"
  • verschlüsseltes /dev/sda2, gemountet nach "/"
  • verschlüsseltes Software-Raid 5 /dev/md0 aus /dev/sdb1,/dev/sdc1,/dev/sdd1, genutzt als LVM oder Dateisystem (wie man möchte)
    • es könnte auch ein Software-Raid 1 oder anderes mit mehr oder weniger Partitionen sein, auch wäre eine weitere einzelne Partition wie /dev/sda5 möglich
  • Passphrase für die verschlüsselten Partitionen
  • USB-Stick mit vfat Dateisystem (kann auch ext2 oder anderes sein) für Keyfile für root
  • /dev/disk/by-uuid/
  • Anpassen von /etc/crypttab
  • 2. Keyfile in /etc für weitere Partition(en)
  • Eintrag von Modulen für USB-Stick in /etc/initramfs-tools/modules
  • initrd erstellen
  • systemd-cryptsetup für sda2 deaktivieren

Leider haben alle Versuche auch die 2. Partition mit dem Key vom Stick zu entschlüsseln nicht funktioniert. Entweder wurde nicht entschlüsselt, oder der Stick war anschließend noch gemountet. Daher soll der 2. Key im verschlüsselten /etc liegen.

Installation

Während der Installation von Debian (Stretch) legt man die gewünschten Partitionen an:

  • /dev/sda1 für /boot, 500 - 1000 MB, Dateisystem ext4
  • /dev/sda2 für /, Rest der Platte, physikalischer Datenträger für Verschlüsselung
    • ^^ kann man dann als komplette Partition nutzen, oder mittels LVM weitere Unterteilung vornehmen
  • Partitionen für Raid anlegen und über die Menüs im Installer einrichten. md0 wird dann ebenfalls ein physikalischer Datenträger für Verschlüsselung

Nachdem im Installationsprozess alle Daten der zu verschlüsselnden Partitionen gelöscht wurden (kann sehr lange dauern), gibt man die Passphrase für den ersten Key ein. Beim erstem Start des System muss man nun diese Passphrase 2x eingeben.

Konfiguration

Für den Key kann man eine vorhandene Datei (z.B. ein kleines Bild) nehmen, oder man erstellt sich selber eine. Dazu gibt es mehrere Varianten, die alle in den unterschiedlichen Anleitungen beschrieben sind. Hauptsache es ist eine Datei die sich anschließend nicht mehr verändert. Auch sollte sie nicht zu groß (mehrere MB) sein, da der Startprozess sonst ewig dauert.

Der USB-Stick ist nun im System und für diesen Artikel "/dev/sde" mit der vfat-formatierten Partition "/dev/sde1". Es muss die UUID dieser Partition ermittelt werden: ls -l /dev/disk/by-uuid/ lrwxrwxrwx 1 root root 10 Jan 9 19:13 C5E0-C358 -> ../../sde1

Neben weiteren Einträgen findet sich einer, der auf sde1 zeigt. Diesen benötigen wir. Die Datei (z.B. ein kleines jpg) für den Key liegt bereits auf dem Stick und dieser ist z.B. nach /mnt gemountet. Für die 2. verschlüsselte Partition wird nun noch ein Key erstellt:

$ dd if=/dev/urandom of=/etc/.crypt-keyfile bs=1024 count=4

Die zusätzlichen Key werden nun hinzugefügt:

$ cryptsetup luksAddKey /dev/sda2 /mnt/kleines_bild.jpg $ cryptsetup luksAddKey /dev/md0 /etc/.crypt-keyfile

Es muss die Passphrase eingegeben werden, die bei der Installation festgelegt wurde.

Nun wird die Datei /etc/crypttab angepasst. Die eingetragen UUID sind die der verschlüsselten Partitionen (siehe ls -l /dev/disk/by-uuid/).

  1. root-Parition

sda2_crypt UUID=41b2f1c4-798e-4068-9ec5-970213335de2 /dev/disk/by-uuid/C5E0-C358:/kleines_bild.jpg luks,keyscript=/lib/cryptsetup/scripts/passdev

  1. Raid

md0_crypt UUID=4e751d17-f347-4b7c-a23f-0ccc4284bbc2 /etc/.crypt-keyfile luks

Als nächstes müssen noch Module in die /etc/initramfs-tools/modules eingetragen werden, damit der Stick beim System-Start zur Verfügung steht: nls_ascii nls_cp437 vfat fat

Und das initrd neu erstellt werden:

$ update-initramfs -u

Sollte der Stick mit ext2 oder anderem formatiert sein, bitte mit lsmod schauen, welche Module geladen wurden und diese an eintragen.

Mittels

$ touch "/etc/systemd/system/systemd-cryptsetup@sda2_crypt.service"

muss nun noch systemd daran gehindert werden, ebenfalls sda2 entschlüsseln zu wollen. Lässt man diesen Punkt weg verzögert sich der Systemstart um ca. 1:30 Minuten. :-)

Ein reboot sollte nun den Key vom Stick einlesen und das System normal starten. :-)

Quellenverzeichnis

Manpages

Info-Dokummente

  • info $Befehl

/usr/share/doc/

  • zless /usr/share/doc/$Verwendete/$Doku.gz

Wikiseiten

Weblinks

Alle Seiten, die ich auf der Suche nach Infos zur Konfiguration gefunden und gelesen habe:


Literatur

  • Titel, Autor, ISBN