Так, ви можете зробити це, відкривши головний ключ, коли гучність розшифровується.
Швидко та брудно додати нову парольну фразу:
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
для того, щоб сказати, що ми хочемо використовувати головний ключ замість цього. Це оболонка командної підстановки & перенаправлення. В основному він виконує все, що знаходиться всередині, посилає вихід на трубу, а потім замінює шлях на цю трубку.
<(...)
<(...)
Таким чином, вся команда - це лише однолінійний конденсат для декількох операцій.