Hallo. Die Meldung ergab folgenden Suchtreffer: http://www.linuxforen.de/forums/showthread.php?275038-luks-verschl%FCsselung-mit-passphrase-und-key-file. Bestätigt dann mein Posting im anderen Diskussionsartikel: LUKS.
System verschlüsseln/Schlüsselableitung
Anmeldungsdatum: Beiträge: 29240 Wohnort: Germany |
|
||||||
![]() Anmeldungsdatum: Beiträge: 6244 Wohnort: Berlin |
Der Befehl /lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sdX2 funktioniert nicht. Das wird in dem von Dir verlinkten Beitrag ebenfalls beschrieben. Was jetzt Dein anderer Beitrag mit diesem Fehler zu tun hat, erschließt sich mir nicht. |
||||||
Anmeldungsdatum: Beiträge: 29240 Wohnort: Germany |
Auch er funktioniert ohne diese Meldung, wenn der Sicherheitsschlüssel ZUVOR angelegt wurde. Steht erstens im Weblink und zweitens hatten wir ja gerade die Diskussion im Forum, wo ich lang und breit erläuterte, dass und warum alles zur Ableitung bei mir funktionierte - hättest also auch erst mal dort fragen können, was ich anders mache. Drittens hab ich dann in der von uns beiden hier verlinkten Wikidiskussion bestätigt, dass es wohl (deine Tests) nur (dann aber gewiss, meine Benutzung) funktioniert, wenn der Sicherheitsschlüssel ZUVOR angelegt wurde. Damit sollten eigentlich jetzt alle Unklarheiten beseitigt sein. Den Schlüssel zuvor anlegen beseitigt also beide Probleme, die Meldung beim Anlegen hier und die beim PW ergänzen drüben. Schön, dass du es bisher auch getestet hast. Bliebe also nur der Hinweis zu ändern, das der Sicherheitsschlüssel zuvor angelegt werden muss? Möchtest du das für deinen Fall (der wie meiner gelagert ist, Wiki-geleitet) testen? Grüße, Benno |
||||||
![]() Anmeldungsdatum: Beiträge: 6244 Wohnort: Berlin |
Ich habe nun herausgefunden, dass der Fehler in der Befehlszeile der letzte Parameter /lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sdX2 muss einen Fehler produzieren, da mit dem Parameter /lib/cryptsetup/scripts/decrypt_derived <Name_des_Ursprungsgeräts> | cryptsetup -c aes-xts-plain64 -s 512 luksFormat <Gerät> Von daher sollte der Befehl nach /lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdX2 geändert werden. Insofern bezweifle ich, dass der Befehl so bei Dir funktioniert hat - und zwar unabhängig von einem angelegten Sicherheitsschlüssel. |
||||||
Anmeldungsdatum: Beiträge: 29240 Wohnort: Germany |
Es wird halt unübersichtlich, zumal in zwei Threads, die aber meines Erachtens dieselbe Ursache hatten. Also: Ich hab es mit dem Umweg über ramfs wie im Wiki gemacht. Ich hatte aber auch Pipes - meines Wissens nach zum Erzeugen von Keydateien, aber auch zum Entschlüsseln damit - mal mit und mal ohne Zwischendatei rumspielend. Mit vorhandenem Sicherheits-PW klappte das alles wie gewünscht. Sowas wie -y hab ich sicherlich sowieso gleich wieder rausgehauen oder es wird manchmal im Wiki ohne verwendet, wie du schon selber festgestellt hast. Und den Sicherheitskey eben vorher anlegen. Dann sollte alles klappen. Zum ramfs steht ja nun schon wieder im andren Thema was von wem. 😬 Und eine andere Schreibweise/ Lösung für einen Teil des Problemkomplexes. |
||||||
![]() Anmeldungsdatum: Beiträge: 6244 Wohnort: Berlin |
Ich kann leider im Moment außer meinen Hinweisen nichts weiter beitragen, weil ich auf Grund meiner Medikamente derzeit nur eingeschränkt konzentrationsfähig bin. Es wäre schön, wenn sich jemand fände, die Fehler im Wiki zu beseitigen. |
||||||
Anmeldungsdatum: Beiträge: 83 |
Das Befolgen dieser Anleitung führt bei mir leider nicht zur erfolgreichen Schlüsselableitung, sondern zur Fehlermeldung: "/etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived: device root doesn't exist". Aber mein Rootlaufwerk, von welchem der Schlüssel abgeleitet werden soll, heißt wie in der Anleitung auch root und ist auch unter /dev/mapper/root zu finden. UUIDs sind alle korrekt. Was läuft hier verkehrt oder habe ich die Anleitung nicht richtig verstanden? |
||||||
Ehemaliger
![]() Anmeldungsdatum: Beiträge: 28765 Wohnort: WW |
Hallo, welche Ubuntu-Version verwendest du? Gruß, noisefloor |
||||||
Supporter
Anmeldungsdatum: Beiträge: 6452 |
Hallo, der Artikel wurde nun diesbezgl. geändert, was auf Korrektheit überprüft werden sollte. Gruß BillMaier |
||||||
Anmeldungsdatum: Beiträge: 83 |
18.04 Bionic Beaver |
||||||
Anmeldungsdatum: Beiträge: 83 |
Was genau wurde geändert mit welcher beabsichtigter Auswirkung? |
||||||
Anmeldungsdatum: Beiträge: 29240 Wohnort: Germany |
Es wurde ein Pfad zur Datei ergänzt. |
||||||
Anmeldungsdatum: Beiträge: Zähle... |
Diese Fehlermeldung hatte ich auch. Das Problem liegt hier:
Diese Zeile funktioniert mit der in Bionic Beaver (LTS 18.04) enthaltenen Version von cryptsetup nicht mehr. Zwischen den von Ubuntu ausgelieferten Versionen 1.7.2-0ubuntu4 und 1.7.3-4ubuntu1 (siehe cryptsetup package publishing history) hat sich nämlich das Skript /lib/cryptsetup/scripts/decrypt_derived verändert: Aus dem Block
ist dabei der Block
geworden. In diesem Block dürfen aber nicht alle $1 durch root ersetzt werden, weil das zweite $1 eine durch den awk-Befehl vorbelegte Bedeutung hat (wie man am Syntax-Highlighting des Editors auch gut sieht). Für das Skript /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived sollte dieser Block stattdessen wie folgt aussehen:
Mit dieser Änderung konnte ich die Anleitung und damit die Installation erfolgreich durchlaufen. Für die Anleitung muss der sed-Befehl also geändert werden und wird dadurch etwas komplizierter. Folgende Möglichkeiten kommen mir in den Sinn: 1. sed -i s/\"\$1\"/\"root\"/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived sed -i s/\ \$1/\ root/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived 2. sed -i s/\'\$1\ ==\ target/tempPlatzhalter/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived sed -i s/\$1/root/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived sed -i s/tempPlatzhalter/\'\$1\ ==\ target/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived Fällt euch was schöneres oder kürzeres ein? Hinweis: Neben Bionic Beaver (LTS 18.04) sind wohl auch alle Artful Aardvark-Releases (17.10) betroffen. |
||||||
Anmeldungsdatum: Beiträge: 29240 Wohnort: Germany |
Schön, dass das hier jemand weiterpflegt und komisch, dass das Script angepasst wurde und es in Ubuntu immer noch nicht funktioniert - überhaupt, dass es so lange nicht funktioniert. Aber nun gut, das ist ja das Schöne an Open Source und Communities... Ich musste abends abgelenkt echt eine Weile über deine Zeilen grübeln, weil ich zu faul zum Testen war und vom Sofa aus auch nicht ständig ins Original schaute, wo vieles klarer wurde. Die Frage ist, ob dann erst mal eine Weile Ruhe ist. Das Wiki tendiert sonst wohl eher dazu, die komplette Datei in Codeblock zu posten. Ich fand sed irgendwie handlicher für Anwender. Wenn man dabei bleiben will, müsste es nochmal einer mit einer Testdatei testen bzw. dir vertrauen. Möglich wäre auch die Angabe von Ersetzungsnummern, hier den 2. Treffer: $ echo "1 1 1" | sed "s/1/0/2" 1 0 1 Deine erste Variante ist etwas kürzer, man könnte nun ja die beiden probieren und vergleichen. Findet sich keiner, müssten wir den Codeblock einpflegen. Könntest du vielleicht der Zeitersparnis halber auch einfach nochmal für alle einschließlich mir bei deiner ersten Variante erläutern, wieso du den selben Befehl wiederholst, nur einmal ohne Anführungszeichen? Reicht da nicht die ohne, um auch die Ersetzungen an den Stellen mit mit zu erwischen? Eine Kopie der Ein- und Ausgabe im Terminal könnte hier viel bringen. Müsste sonst eben jeder für sich zusammenfummeln. Dann kommen hier ewig keine Antworten. |
||||||
Anmeldungsdatum: Beiträge: 4 |
Jup klar, gerne. ☺ Sorry, dass ich dem ersten Post den Kontext etwas vernachlässigt habe. (Der zitierte sed-Befehl stammte aus der Anleitung und ist derjenige Teil der Anleitung, der nun nicht mehr funktioniert.) Der zweite Befehl wäre natürlich überflüssig, wenn er nur eine Kopie des ersten ohne die Anführungszeichen wäre. Das ist er aber nicht, denn beim zweiten Befehl steht vor dem $1 ein Leerzeichen! Hintergrund: Das neue Skript /lib/cryptsetup/scripts/decrypt_derived sieht im Ganzen so aus:
Für die Erstellung des Skripts /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived, das dann beim Booten benötigt wird, soll diese Datei kopiert und dann sollen alle Stellen $1, die für das erste Kommandozeilen-Argument stehen, durch root ersetzt werden. In dem neuen Skript sind das alle auftretenden $1 bis auf das markierte in dem folgenden Block: if ! device=$(dmsetup --showkeys table 2>/dev/null \ | awk -vtarget="$1" '$1 == target ":" {print}'); then echo "$0: failed to find $1 in dmtable" >&2 exit 1 fi Um alle anderen, aber nicht diese Stelle zu ersetzen, habe ich versucht, ein Alleinstellungsmerkmal dieser Stelle im Vergleich zu den anderen zu finden und folgendes gefunden: An der markierten Stelle ist das Zeichen davor ein einfaches Anführungszeichen ', alle anderen Stellen sind von der Form "$1" oder ␣$1 (Leerzeichen vor dem Platzhalter!). Wenn wir also diese jeweils durch "root" bzw. ␣root ersetzen, erreichen wir das Gewünschte. Dafür sind die beiden verschiedenen Befehle da. PS: Ich hab die Änderung mit den beiden Zeilen schon mal in den Wiki-Eintrag eingepflegt. Ich hoffe, das ist ok - falls nicht, macht es bitte erstmal wieder rückgängig. Anhang Hier noch die schrittweisen Änderungen des Skripts nach den Befehlen: $ sed -i s/\"\$1\"/\"root\"/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived Datei danach: #!/bin/sh # WARNING: If you use the decrypt_derived keyscript for devices with # persistent data (i.e. not swap or temp devices), then you will lose # access to that data permanently if something damages the LUKS header # of the LUKS device you derive from. The same applies if you luksFormat # the device, even if you use the same passphrase(s). A LUKS header # backup, or better a backup of the data on the derived device may be # a good idea. See the Cryptsetup FAQ on how to do this right. countlines() { local IFS input count tmp input="root" count=0 IFS=' ' for tmp in $input; do count=$(( $count + 1 )) done echo $count } if [ -z "root" ]; then echo "$0: must be executed with a crypto device as argument" >&2 exit 1 fi if ! device=$(dmsetup --showkeys table 2>/dev/null \ | awk -vtarget="root" '$1 == target ":" {print}'); then echo "$0: failed to find $1 in dmtable" >&2 exit 1 fi if [ -z "$device" ]; then echo "$0: device $1 doesn't exist" >&2 exit 1 fi count=$(countlines "$device") if [ $count -ne 1 ]; then echo "$0: more than one device match $1" >&2 exit 1 fi eval set -- $device type="$4" key="$6" if [ "$type" != "crypt" ]; then echo "$0: device $1 is not a crypto device" >&2 exit 1 fi echo -n "$key" exit 0
sed -i s/\ \$1/\ root/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived Datei danach: #!/bin/sh # WARNING: If you use the decrypt_derived keyscript for devices with # persistent data (i.e. not swap or temp devices), then you will lose # access to that data permanently if something damages the LUKS header # of the LUKS device you derive from. The same applies if you luksFormat # the device, even if you use the same passphrase(s). A LUKS header # backup, or better a backup of the data on the derived device may be # a good idea. See the Cryptsetup FAQ on how to do this right. countlines() { local IFS input count tmp input="root" count=0 IFS=' ' for tmp in $input; do count=$(( $count + 1 )) done echo $count } if [ -z "root" ]; then echo "$0: must be executed with a crypto device as argument" >&2 exit 1 fi if ! device=$(dmsetup --showkeys table 2>/dev/null \ | awk -vtarget="root" '$1 == target ":" {print}'); then echo "$0: failed to find root in dmtable" >&2 exit 1 fi if [ -z "$device" ]; then echo "$0: device root doesn't exist" >&2 exit 1 fi count=$(countlines "$device") if [ $count -ne 1 ]; then echo "$0: more than one device match root" >&2 exit 1 fi eval set -- $device type="$4" key="$6" if [ "$type" != "crypt" ]; then echo "$0: device root is not a crypto device" >&2 exit 1 fi echo -n "$key" exit 0 Ich hoffe, das klärt die offenen Fragen. 😉 |