У меня есть сервер 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
чтобы сообщить ему, что хотим использовать главный ключ. Подстановка и перенаправление
команд <(...)
оболочки. По сути, он выполняет все внутри, отправляет вывод в канал, а затем заменяет на <(...)
путь к этому каналу.
Таким образом, вся команда представляет собой всего лишь одну строку, объединяющую несколько операций.