Изменить пароль в файловой системе LUKS, не зная пароля

Изменить пароль в файловой системе LUKS, не зная пароля

У меня есть сервер Debian Wheezy, который работает уже некоторое время с зашифрованным диском. Пароль для зашифрованного диска ( /dev/sda5) был утерян, когда мой зашифрованный файл паролей был поврежден.

Я хотел бы иметь возможность перезагрузить этот сервер, но для этого, конечно, потребуется этот пароль. Поскольку диск явно находится в расшифрованном состоянии, есть ли способ изменить пароль, не зная старый?

cryptsetup luksChangeKey /dev/sda5требуется пароль тома.

Конечно, я мог бы rsyncвсе снять и перестроить, но мне бы хотелось этого избежать. Я поискал в памяти ( #cat /dev/mem | less), но не смог найти (что очень хорошо!).

решение1

Да, вы можете сделать это, получив доступ к главному ключу во время расшифровки тома.

Быстрый и грязный способ добавить новую парольную фразу:

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

deviceи volume_nameдолжно быть установлено соответствующим образом.
volume_name— это имя расшифрованного тома, которое вы видите в /dev/mapper.


Объяснение:

Тома LUKS шифруют свои данные с помощью главного ключа. Каждая добавленная вами парольная фраза просто сохраняет копию этого главного ключа, зашифрованную с помощью этой парольной фразы. Поэтому, если у вас есть главный ключ, вам просто нужно использовать его в новом слоте ключа.

Давайте разберем приведенную выше команду.

$ dmsetup table --showkeys $volume_name

Это выводит кучу информации об активно расшифрованном томе. Вывод выглядит так:

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

Поле №5 — главный ключ.

 

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

Не буду показывать выходные данные в виде двоичных данных, но эта команда извлекает главный ключ для тома, а затем преобразует его в необработанные двоичные данные, которые понадобятся позже.

 

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

Это говорит cryptsetup добавить новый ключ к тому. Обычно это действие требует существующего ключа, однако мы используем , --master-key-fileчтобы сообщить ему, что хотим использовать главный ключ. Подстановка и перенаправление
команд <(...)оболочки. По сути, он выполняет все внутри, отправляет вывод в канал, а затем заменяет на <(...)путь к этому каналу.

 

Таким образом, вся команда представляет собой всего лишь одну строку, объединяющую несколько операций.

Связанный контент