{"id":2632,"date":"2020-10-19T07:00:00","date_gmt":"2020-10-19T05:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=2632"},"modified":"2023-06-18T17:54:23","modified_gmt":"2023-06-18T15:54:23","slug":"datentraeger-unter-linux-mit-cryptsetup-luks-verschluesseln","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/datentraeger-unter-linux-mit-cryptsetup-luks-verschluesseln\/","title":{"rendered":"Datentr\u00e4ger unter Linux mit cryptsetup (LUKS) verschl\u00fcsseln"},"content":{"rendered":"\n<p>Ihr m\u00f6chtet einen Datentr\u00e4ger wie z.B. eine Festplatte oder einen USB-Stick verschl\u00fcsseln, damit bei einem Verlust des Datentr\u00e4gers nicht jeder ohne weiteres Zutun eure Daten lesen kann? Dann haben wir ein gemeinsames Ziel!<\/p>\n\n\n\n<p>Im Folgenden beschreibe ich, wie unter Linux mit Hilfe des Programms <code>cryptsetup<\/code> eine Festplatte verschl\u00fcsselt werden kann. Dazu geh\u00f6rt die Beschreibung, wie das verschl\u00fcsselte Ger\u00e4t anschlie\u00dfend zur Nutzung ge\u00f6ffnet wird und wie man es in die <em>\/etc\/crypttab<\/em> eintr\u00e4gt, um das Ger\u00e4t automatisch beim Start des Rechners zu \u00f6ffnen. Es handelt sich dabei um eine zus\u00e4tzliche Festplatte. Wie die erste Festplatte eines Systems verschl\u00fcsselt werden kann ist hingegen nicht Gegenstand dieses Artikels. Hier hilft (hoffentlich) ein Blick in die Installationsanleitung der jeweiligen Linux-Distribution weiter.<\/p>\n\n\n\n<p>Das Programm <code>cryptsetup<\/code> ist in allen g\u00e4ngigen Linux-Distributionen verf\u00fcgbar. Falls nicht, kann es direkt von der <a rel=\"noreferrer noopener\" href=\"https:\/\/gitlab.com\/cryptsetup\/cryptsetup\/\" data-type=\"URL\" data-id=\"https:\/\/gitlab.com\/cryptsetup\/cryptsetup\/\" target=\"_blank\">Projekt-Homepage auf GitLab<\/a> bezogen werden. Die hier gezeigten Kommandos funktionieren prinzipiell auf jedem Linux-System, auf dem <code>cryptsetup<\/code> verf\u00fcgbar ist.<\/p>\n\n\n\n<p>Bevor es losgeht noch ein Hinweis. Ich m\u00f6chte ein verschl\u00fcsseltes Ger\u00e4t erstellen, mit dem Ziel, dass nicht jeder die Daten einfach lesen kann, dem das Ger\u00e4t in die H\u00e4nde f\u00e4llt. Dabei denke ich an Szenarien wie Verlust, Diebstahl, Verkauf etc. Die Daten vor dem Zugriff durch Sicherheitsbeh\u00f6rden, Geheimdiensten oder Schurkenstaaten zu sch\u00fctzen erfordert einen deutlichen h\u00f6heren Aufwand und ist nicht Gegenstand dieses Artikels.<\/p>\n\n\n\n<p>Ich verwende im Folgenden <a rel=\"noreferrer noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Dm-crypt#Erweiterung_mit_LUKS\" data-type=\"URL\" data-id=\"https:\/\/de.wikipedia.org\/wiki\/Dm-crypt#Erweiterung_mit_LUKS\" target=\"_blank\">LUKS2<\/a>. Wer stattdessen lieber <a rel=\"noreferrer noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Dm-crypt\" data-type=\"URL\" data-id=\"https:\/\/de.wikipedia.org\/wiki\/Dm-crypt\" target=\"_blank\">dm-crypt<\/a> verwendet, sei auf die Manpage cryptsetup(8) verwiesen.<\/p>\n\n\n\n<p>Die zu verschl\u00fcsselnde Festplatte wird in diesem Tutorial als <strong>\/dev\/sdX<\/strong> bezeichnet. Dieser Bezeichner muss auf das tats\u00e4chlich zu nutzende Ger\u00e4t angepasst werden. <strong>Wichtig:<\/strong> Wird versehentlich das falsche Ger\u00e4t verschl\u00fcsselt gehen vorhandene Daten unwiederbringlich verloren!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LUKS-Container erstellen<\/h2>\n\n\n\n<p>Zur Erstellung eines LUKS-Containers wird der folgende Befehl ausgef\u00fchrt und die Bildschirmanweisungen befolgt. F\u00fcr die dabei abgefragte Passphrase gilt grunds\u00e4tzlich: &#8222;Je l\u00e4nger und komplizierter, desto sicherer. Wobei es mehr auf die L\u00e4nge als die Komplexit\u00e4t ankommt.&#8220;<\/p>\n\n\n\n<p>Weitere Hinweise zur Passwort-Sicherheit bietet der Wikipedia-Artikel zu <a rel=\"noreferrer noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Passwort#Passsatz\" data-type=\"URL\" data-id=\"https:\/\/de.wikipedia.org\/wiki\/Passwort#Passsatz\" target=\"_blank\">Passsatz<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo cryptsetup luksFormat --type luks2 \/dev\/sdX\nWARNING: Device \/dev\/sdX already contains a 'dos' partition signature.\n\nWARNING!\n========\nThis will overwrite data on \/dev\/sdX irrevocably.\n\nAre you sure? (Type uppercase yes): YES\nEnter passphrase for \/dev\/sdX: \nVerify passphrase:<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Hinzuf\u00fcgen einer Backup-Passphrase<\/h2>\n\n\n\n<p>LUKS-Passphrasen werden in sogenannten Key-Slots gespeichert. Bei LUKS2 stehen 32 Key-Slots zur Verf\u00fcgung, welche von 0-31 nummeriert sind. Bei LUKS1 waren es 8 Key-Slots. Die Passphrase aus dem vorigen Abschnitt wurde in Slot 0 gespeichert.<\/p>\n\n\n\n<p>Vergisst man die Passphrase, wird der Key-Slot oder der LUKS-Header besch\u00e4digt, ist ein Zugriff auf die Daten nicht mehr m\u00f6glich. Um mich gegen die ersten beiden F\u00e4lle abzusichern, erstellte ich zwei Backup-Passphrasen, welche ich in den Key-Slots 3 und 8 speicherte. Wie man sich gegen den Verlust des LUKS-Headers sch\u00fctzt, beschreibe ich im folgenden Abschnitt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ # Hinzuf\u00fcgen der ersten Backup-Passphrase in Key-Slot 3\n$ sudo cryptsetup luksAddKey \/dev\/sdX --key-slot 3\nEnter any existing passphrase: \nEnter new passphrase for key slot: \nVerify passphrase:\n\n$ # Hinzuf\u00fcgen der zweiten Backup-Passphrase in Key-Slot 8\n$ sudo cryptsetup luksAddKey \/dev\/sdX --type luks2 --key-slot 8\nEnter any existing passphrase: \nEnter new passphrase for key slot: \nVerify passphrase:<\/code><\/pre>\n\n\n\n<p>F\u00fcr die Backup-Passphrasen gilt selbstverst\u00e4ndlich das im vorangegangenen Abschnitt Beschriebene. Die einzelnen Passphrasen sollten von gleicher G\u00fcte sein.<\/p>\n\n\n\n<p>Die Backup-Passphrasen sind an einem sicheren Ort aufzubewahren. Ich verwende dazu bspw. einen Passwort-Tresor (vgl. <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/sichere-passworter-und-wie-man-sie-verwaltet\/\" data-type=\"post\" data-id=\"98\">Sichere Passw\u00f6rter und wie man sie verwaltet<\/a>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-d20b58ea-caf9-4e78-ac0e-522926022e22\">LUKS-Header sichern<\/h2>\n\n\n\n<p>Nun n\u00fctzen alle Backup-Passphrasen nichts, wenn der LUKS-Header besch\u00e4digt wird. Daher empfehle ich diesen mit Hilfe des folgenden Kommandos in eine Datei zu sichern.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo cryptsetup luksHeaderBackup \/dev\/sdX --header-backup-file \/var\/tmp\/luksHeaderBackup_2020-10-18<\/code><\/pre>\n\n\n\n<p>Die so erstellte Datei ist sicher &#8212; am besten offline und vom Datentr\u00e4ger getrennt &#8212; aufzubewahren. Mit Hilfe dieser Datei und einer Passphrase, welche bei Erstellung des Backups g\u00fcltig war, kann ein defekter LUKS-Header und damit der Zugriff auf ein verschl\u00fcsseltes Ger\u00e4t wiederhergestellt werden.<\/p>\n\n\n\n<p>\u00c4ndert man im Laufe der Zeit in Key-Slots gespeicherte Passphrasen, l\u00f6scht alte oder f\u00fcgt neue hinzu, so ist eine erneute Sicherung des LUKS-Headers sinnvoll und angeraten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LUKS-Container \u00f6ffnen und nutzen<\/h2>\n\n\n\n<p>Bis jetzt haben wir auf dem Block-Ger\u00e4t <strong>\/dev\/sdX<\/strong> einen verschl\u00fcsselten LUKS-Container erstellt, Backup-Passphrasen hinzugef\u00fcgt und den LUKS-Header gesichert. Der folgende Code-Block zeigt, wie der LUKS-Container ge\u00f6ffnet und damit nutzbar gemacht wird. Dabei ist <strong>sdX_crypt<\/strong> ein Bezeichner, welcher f\u00fcr den <a rel=\"noreferrer noopener\" href=\"https:\/\/de.wikipedia.org\/wiki\/Device_Mapper\" data-type=\"URL\" data-id=\"https:\/\/de.wikipedia.org\/wiki\/Device_Mapper\" target=\"_blank\">Device Mapper<\/a> verwendet wird. Dieser Bezeichner kann von euch frei gew\u00e4hlt werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo cryptsetup open \/dev\/sdX sdX_crypt\n$ lsblk | grep sdX\nsdX              8:16   0 111,8G  0 disk  \n\u2514\u2500sdX_crypt    254:3    0 111,8G  0 crypt<\/code><\/pre>\n\n\n\n<p>Der so ge\u00f6ffnete LUKS-Container kann nun mit einem Dateisystem eurer Wahl formatiert werden. Folgender Code-Block zeigt ein Beispiel f\u00fcr <em>ext4<\/em>. Dies kann in Abh\u00e4ngigkeit zur Gr\u00f6\u00dfe des LUKS-Containers einige Zeit dauern.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo mkfs.ext4 \/dev\/mapper\/sdX_crypt\n&#91;...]\n$ sudo blkid | grep sdX\n\/dev\/sdX: UUID=\"Eine-furchbar-lange-UUID\" TYPE=\"crypto_LUKS\"\n\/dev\/mapper\/sdX_crypt: UUID=\"Eine-andere-furchbar-lange-UUID\" TYPE=\"ext4\"<\/code><\/pre>\n\n\n\n<p>Man beachte, dass der LUKS-Container direkt mit einem Dateisystem formatiert werden kann. Die Erstellung einer Partition ist nicht erforderlich.<\/p>\n\n\n\n<p>Das erstellte Dateisystem kann anschlie\u00dfend wie gewohnt eingeh\u00e4ngt werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo mount \/dev\/mapper\/sdX_crypt \/mnt<\/code><\/pre>\n\n\n\n<p>Mit den folgenden Kommandos wird das Dateisystem wieder ausgeh\u00e4ngt und der LUKS-Container verschlossen. Damit liegen die Daten nur noch in verschl\u00fcsselter Form vor, bis sie das n\u00e4chste Mal ge\u00f6ffnet werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo umount \/dev\/mapper\/sdX_crypt\n$ sudo cryptsetup close sdX_crypt\n$ sudo cryptsetup status sdX_crypt\n\/dev\/mapper\/sdX_crypt is inactive.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Verschl\u00fcsseltes Dateisystem bei Startvorgang des Rechners \u00f6ffnen und einh\u00e4ngen<\/h2>\n\n\n\n<p>Soll das erstellte Dateisystem <strong>\/dev\/mapper\/sdX_crypt<\/strong> bereits beim Start des Rechners eingeh\u00e4ngt werden, ist folgende Reihenfolge einzuhalten:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>LUKS-Container <strong>sdX_crypt<\/strong> mit Hilfe der <em>\/etc\/crypttab<\/em> \u00f6ffnen<\/li>\n\n\n\n<li>Dateisysteme aus <em>\/etc\/fstab<\/em> einh\u00e4ngen<\/li>\n<\/ol>\n\n\n\n<p>Die Eintr\u00e4ge in den entsprechenden Dateien sehen in meinem Fall wie folgt aus. In <em>\/etc\/crypttab<\/em> wird dabei die UUID des Ger\u00e4tes <strong>\/dev\/sdX<\/strong> verwendet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo cat \/etc\/crypttab\nsdX_crypt UUID=\"Eine-furchbar-lange-UUID\" none luks,discard\n\n$sudo cat \/etc\/fstab\n\/dev\/mapper\/sdX_crypt \/mnt ext4 defaults 0 0<\/code><\/pre>\n\n\n\n<p>Man beachte, dass der Rechner nun den Startvorgang unterbricht und zur Eingabe der Passphrase zum \u00d6ffnen des LUKS-Containers auffordert. Anschlie\u00dfend wird der Startvorgang fortgesetzt.<\/p>\n\n\n\n<p>Damit sind wir eigentlich am Ende des Tutorials angelangt. Wie fandet ihr es? War es verst\u00e4ndlich genug, um folgen zu k\u00f6nnen und Eingangs erw\u00e4hnte Ziele zu erreichen?<\/p>\n\n\n\n<p>Wer noch Zeit und Lust hat, kann gerne weiterlesen. In den folgenden Abschnitten werde ich als Zugabe noch beschreiben, wie man Key-Slots l\u00f6scht und einen LUKS-Header aus einem Backup wiederherstellt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Key-Slots l\u00f6schen<\/h2>\n\n\n\n<p>Mit dem folgenden Befehl werden s\u00e4mtliche Key-Slots des LUKS-Containers gel\u00f6scht. Ein Zugriff auf den LUKS-Container ist anschlie\u00dfend nicht mehr m\u00f6glich. Die Angabe eines Passworts ist nicht erforderlich.<\/p>\n\n\n\n<p><strong>Warnung:<\/strong> Dieser Vorgang kann nicht r\u00fcckg\u00e4ngig gemacht werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo cryptsetup erase \/dev\/sdX\n\nWARNING!\n========\nThis operation will erase all keyslots on device \/dev\/sdb.\nDevice will become unusable after this operation.\n\nAre you sure? (Type uppercase yes):<\/code><\/pre>\n\n\n\n<p>Das war&#8217;s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LUKS-Header aus Sicherung wiederherstellen<\/h2>\n\n\n\n<p>Und nun halte ich noch fest, wie man einen LUKS-Header und die darin enthaltenen Key-Slots aus einer Datensicherung wiederherstellen kann.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo cryptsetup luksHeaderRestore \/dev\/sdX --header-backup-file \/tmp\/luksHeaderBackup_2020-10-18 \n\nWARNING!\n========\nDevice \/dev\/sdX already contains LUKS2 header. Replacing header will destroy existing keyslots.\n\nAre you sure? (Type uppercase yes):<\/code><\/pre>\n\n\n\n<p>Uns schon kann man wieder auf seinen LUKS-Container zugreifen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reflexion<\/h2>\n\n\n\n<p>Um meine Festplatte zu verschl\u00fcsseln und diesen Beitrag zu schreiben, habe ich einige Zeit in der Manpage cryptsetup(8) und auf der <a rel=\"noreferrer noopener\" href=\"https:\/\/gitlab.com\/cryptsetup\/cryptsetup\" target=\"_blank\">Projekt-Seite<\/a> gelesen. Nur mit der Manpage allein w\u00e4re mir eine Nutzung vermutlich erst nach deutlich l\u00e4ngerer Zeit gelungen.<\/p>\n\n\n\n<p>Dabei vermisse ich in der Manpage vor allem eine Inhalts\u00fcbersicht und Beispiele, mit denen man sich g\u00e4ngige Aufgaben schnell ins Ged\u00e4chtnis rufen kann. Zwar existiert seit ca. zwei Jahren ein <a href=\"https:\/\/gitlab.com\/cryptsetup\/cryptsetup\/-\/issues\/404\" data-type=\"URL\" data-id=\"https:\/\/gitlab.com\/cryptsetup\/cryptsetup\/-\/issues\/404\" target=\"_blank\" rel=\"noreferrer noopener\">Ticket zur \u00dcberarbeitung der Manpage<\/a>, doch fehlt es bei den am Projekt beteiligten Personen wie so oft an der Zeit. Diese wird prim\u00e4r zur Arbeit am Code genutzt. F\u00fcr die Dokumentation bleibt keine Zeit \u00fcbrig.<\/p>\n\n\n\n<p>Aktuell erkundige ich mich auf der Mailling-Liste, wie man am besten dazu beitragen kann, die Manpage zumindest in Teilen zu verbessern. Mal sehen, was sich da machen l\u00e4sst.<\/p>\n\n\n\n<p>Da man vermutlich nicht t\u00e4glich mit <code>cryptsetup<\/code> arbeitet, ist eine gute Dokumentation um so wichtiger, da vermutlich niemand alle notwendigen Befehle dauerhaft im Ged\u00e4chtnis beh\u00e4lt.<\/p>\n\n\n\n<p>Mit diesem Tutorial habe ich mir meine eigene Dokumentation f\u00fcr meine h\u00e4ufigsten Anwendungsf\u00e4lle geschaffen. Wenn ihr sie ebenfalls n\u00fctzlich findet, freut mich dies umso mehr.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ihr m\u00f6chtet einen Datentr\u00e4ger wie z.B. eine Festplatte oder einen USB-Stick verschl\u00fcsseln, damit bei einem Verlust des Datentr\u00e4gers nicht jeder ohne weiteres Zutun eure Daten lesen kann? Dann haben wir ein gemeinsames Ziel! Im Folgenden beschreibe ich, wie unter Linux mit Hilfe des Programms cryptsetup eine Festplatte verschl\u00fcsselt werden kann. Dazu geh\u00f6rt die Beschreibung, wie<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/datentraeger-unter-linux-mit-cryptsetup-luks-verschluesseln\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[3],"tags":[596,597,598],"class_list":["post-2632","post","type-post","status-publish","format-standard","hentry","category-tutorials","tag-cryptsetup","tag-crypttab","tag-luks"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2632"}],"version-history":[{"count":6,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2632\/revisions"}],"predecessor-version":[{"id":3543,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2632\/revisions\/3543"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}