Ich habe einen Debian Wheezy-Server, der seit einiger Zeit mit einem verschlüsselten Laufwerk läuft. Das Passwort für das verschlüsselte Laufwerk ( /dev/sda5
) ging verloren, als meine verschlüsselte Passwortdatei beschädigt wurde.
Ich möchte diesen Server neu starten können, aber dazu ist natürlich dieses Passwort erforderlich. Da das Laufwerk offensichtlich entschlüsselt ist, gibt es eine Möglichkeit, das Passwort zu ändern, ohne das alte zu kennen?
cryptsetup luksChangeKey /dev/sda5
erfordert das Passwort des Datenträgers.
Ich könnte natürlich rsync
alles abschalten und neu aufbauen, aber das möchte ich vermeiden. Ich habe im Speicher ( #cat /dev/mem | less
) nachgesehen, konnte es aber nicht finden (was eine sehr gute Sache ist!).
Antwort1
Ja, Sie können dies tun, indem Sie während der Entschlüsselung des Datenträgers auf den Hauptschlüssel zugreifen.
So fügen Sie schnell und einfach eine neue Passphrase hinzu:
device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)
device
und volume_name
sollte entsprechend eingestellt werden.
volume_name
ist der Name des entschlüsselten Datenträgers, den Sie in sehen /dev/mapper
.
Erläuterung:
LUKS-Volumes verschlüsseln ihre Daten mit einem Hauptschlüssel. Jede Passphrase, die Sie hinzufügen, speichert einfach eine Kopie dieses Hauptschlüssels, die mit dieser Passphrase verschlüsselt ist. Wenn Sie also den Hauptschlüssel haben, müssen Sie ihn einfach in einem neuen Schlüsselslot verwenden.
Lassen Sie uns den obigen Befehl auseinandernehmen.
$ dmsetup table --showkeys $volume_name
Dadurch werden eine Menge 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
Ich werde die Ausgabe hiervon nicht als Binärdaten anzeigen, aber hierdurch wird der Hauptschlüssel für das Volume abgerufen und anschließend in Rohbinärdaten konvertiert, 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 sagen --master-key-file
ihm jedoch, dass wir stattdessen den Hauptschlüssel verwenden möchten.
Dies <(...)
ist eine Shell-Befehlsersetzung und -umleitung. Es führt im Grunde alles darin aus, sendet die Ausgabe an eine Pipe und ersetzt sie dann durch <(...)
einen Pfad zu dieser Pipe.
Der gesamte Befehl besteht also nur aus einer Zeile, um mehrere Vorgänge zusammenzufassen.