Ya, Anda dapat melakukan ini dengan mengakses kunci utama saat volume didekripsi.
Cepat dan kotor untuk menambahkan frasa sandi baru:
device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)
device
dan volume_name
harus ditetapkan dengan tepat.
volume_name
adalah nama volume yang didekripsi, yang Anda lihat di /dev/mapper
.
Penjelasan:
Volume LUKS mengenkripsi data mereka dengan kunci utama. Setiap frasa sandi yang Anda tambahkan cukup menyimpan salinan kunci utama ini yang dienkripsi dengan frasa sandi itu. Jadi jika Anda memiliki kunci master, Anda hanya perlu menggunakannya di slot kunci baru.
Mari kita sobek perintah di atas.
$ dmsetup table --showkeys $volume_name
Ini membuang banyak informasi tentang volume yang didekripsi secara aktif. Outputnya terlihat seperti ini:
0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096
Bidang # 5 adalah kunci utama.
$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p
Tidak akan menampilkan output ini sebagai data biner, tetapi yang dilakukan adalah mengambil kunci utama untuk volume, dan kemudian mengubahnya menjadi data biner mentah yang diperlukan nanti.
$ cryptsetup luksAddKey $device --master-key-file <(...)
Ini memberitahu cryptsetup untuk menambahkan kunci baru ke volume. Biasanya tindakan ini membutuhkan kunci yang ada, namun kami menggunakannya --master-key-file
untuk mengatakan bahwa kami ingin menggunakan kunci master.
Ini <(...)
adalah perintah substitusi shell & pengalihan. Ini pada dasarnya mengeksekusi semua yang ada di dalamnya, mengirimkan output ke pipa, dan kemudian mengganti <(...)
dengan path ke pipa itu.
Jadi seluruh perintah hanya satu-liner untuk menyingkat beberapa operasi.