Ändern Sie das Passwort in einem LUKS-Dateisystem, ohne das Passwort zu kennen

30

Ich habe einen Debian Wheezy-Server, der schon eine Weile mit einem verschlüsselten Laufwerk läuft. Das Kennwort für das verschlüsselte Laufwerk ( /dev/sda5) ging verloren, als meine verschlüsselte Kennwortdatei beschädigt wurde.

Ich möchte diesen Server neu starten können, aber das erfordert natürlich dieses Passwort. Gibt es eine Möglichkeit, das Kennwort zu ändern, ohne das alte zu kennen, da sich das Laufwerk eindeutig in einem entschlüsselten Zustand befindet?

cryptsetup luksChangeKey /dev/sda5 erfordert das Passwort des Volumes.

Ich könnte natürlich rsyncalles abbauen und wieder aufbauen, aber das möchte ich vermeiden. Ich habe die Erinnerung durchgesehen ( #cat /dev/mem | less), konnte sie aber nicht finden (was sehr gut ist!).

Ethan
quelle
2
Hmmmm .... Was nützt ein verschlüsseltes Dateisystem, wenn es so einfach ist, ohne Passwort darauf zuzugreifen?
MDPC
7
@mdpc: Dein Witz macht keinen Sinn. Er hat Zugriff auf das Dateisystem, weil er hatte das Passwort , wenn der Server zuletzt gestartet.
G-Man sagt, dass Monica
2
Nur weil Sie das Passwort HATTEN (und es wurde beschädigt), wird mein Kommentar nicht ungültig. Wenn Sie das Passwort für verschlüsseltes Material vergessen, sollte es im Allgemeinen für immer verloren sein. Ansonsten war es der Grund, warum es verschlüsselt wurde.
mdpc
3
@mdpc Präsens, er hat aktuell Zugriff auf das Dateisystem.
Patrick
Gleiche Frage zum Super User: LUKS-Passwort verloren, verschlüsselte Partition offen (nicht beantwortet).
G-Man sagt, dass Monica

Antworten:

40

Ja, Sie können dazu auf den Hauptschlüssel zugreifen, während das Volume entschlüsselt wird.

Das schnelle und schmutzige Hinzufügen einer neuen Passphrase:

device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)

deviceund volume_namesollte entsprechend eingestellt werden.
volume_nameist der Name des entschlüsselten Volumes, in dem Sie sehen /dev/mapper.


Erläuterung:

LUKS-Volumes verschlüsseln ihre Daten mit einem Hauptschlüssel. Jede von Ihnen hinzugefügte Passphrase speichert einfach eine mit dieser Passphrase verschlüsselte Kopie dieses Hauptschlüssels. Wenn Sie also den Hauptschlüssel haben, müssen Sie ihn nur in einem neuen Schlüsselschlitz verwenden.

Lassen Sie uns den obigen Befehl zerreißen.

$ dmsetup table --showkeys $volume_name

Dadurch werden eine Reihe von Informationen über das aktiv entschlüsselte Volume ausgegeben. Die Ausgabe sieht folgendermaßen aus:

0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096

Feld Nr. 5 ist der Hauptschlüssel.

 

$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p

Die Ausgabe davon wird nicht als Binärdaten angezeigt, aber dies bewirkt, dass der Hauptschlüssel für das Volume abgerufen und dann in rohe Binärdaten konvertiert wird, die später benötigt werden.

 

$ cryptsetup luksAddKey $device --master-key-file <(...)

Dies weist cryptsetup an, dem Volume einen neuen Schlüssel hinzuzufügen. Normalerweise erfordert diese Aktion einen vorhandenen Schlüssel. Wir --master-key-fileteilen ihm jedoch mit, dass wir stattdessen den Hauptschlüssel verwenden möchten.
Dies <(...)ist die Ersetzung und Umleitung von Shell-Befehlen. Es führt im Grunde genommen alles aus, sendet die Ausgabe an eine Pipe und ersetzt die <(...)durch einen Pfad zu dieser Pipe.

 

Der gesamte Befehl ist also nur ein einziger Zeilenumbruch, um mehrere Vorgänge zu verdichten.

Patrick
quelle
Ich bin nicht sicher, ob ich etwas falsch mache, aber mein LUKS zeigt überhaupt keine Zeichenfolge wie die, die Sie im Beispiel anzeigen. Es ist eine kurze, 9-stellige Zahl. Auch meins zeigt als "lineares 8: 3".
SLM
@slm Wenn es angezeigt wird, handelt es sich linearnicht um ein offenes LUKS-Volume (falscher Wert für volume_nameim angegebenen Befehl). Ein offenes LUKS-Volume wird cryptim 3. Feld angezeigt . In würde cryptsetup luksOpen /dev/foo barder volume_nameWert sein bar.
Patrick
Hab es jetzt verstanden. Es ist ein Band unter dem /dev/mapperNamen luks-...... Dies ist das Volume, das Sie verwenden müssen, nicht das LVM-zugeordnete logische Volume.
slm
1
Es scheint, dass sich mit den letzten Versionen von dmsetup das Format von dmsetup tablegeändert hat. Zumindest für mich wird der Hauptschlüssel in der Spalte angezeigt $6.
Karol Babioch
@KarolBabioch hast du wohl den Volume-Namen nicht angegeben?
Frostschutz