Да, вы можете сделать это, получив доступ к главному ключу во время расшифровки тома.
Быстро и грязно добавить новую фразу-пароль:
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
чтобы сообщить, что вместо этого мы хотим использовать мастер-ключ. Это оболочка командной подстановки & перенаправления. Он в основном выполняет все внутри, отправляет вывод в канал, а затем заменяет путь к этому каналу.
<(...)
<(...)
Таким образом, вся команда - это всего лишь одна строка для сжатия нескольких операций.