Ubah kata sandi pada sistem file LUKS tanpa mengetahui kata sandinya

30

Saya memiliki server Debian Wheezy yang sudah berjalan beberapa saat dengan drive yang dienkripsi. Kata sandi untuk drive terenkripsi ( /dev/sda5) hilang ketika file kata sandi terenkripsi saya rusak.

Saya ingin dapat me-reboot server ini, tetapi tentu saja itu memerlukan kata sandi itu. Karena drive jelas dalam status terenkripsi, apakah ada cara untuk mengubah kata sandi tanpa mengetahui yang lama?

cryptsetup luksChangeKey /dev/sda5 membutuhkan kata sandi volume.

Saya tentu saja dapat melakukan rsyncsemuanya dan membangun kembali, tetapi saya ingin menghindari itu. Saya melihat melalui memori ( #cat /dev/mem | less), tetapi tidak dapat menemukannya (yang merupakan hal yang sangat bagus!).

Ethan
sumber
2
Hmmmm .... Apa gunanya memiliki sistem file terenkripsi jika begitu mudah untuk mengaksesnya tanpa kata sandi.
mdpc
7
@mdpc: Gurauan Anda tidak masuk akal. Dia memiliki akses ke sistem file, karena dia memiliki kata sandi ketika server terakhir kali boot.
G-Man Mengatakan 'Reinstate Monica'
2
Hanya karena Anda MEMILIKI kata sandi (dan itu rusak) tidak membatalkan komentar saya. Secara umum, jika Anda lupa kata sandi untuk semua jenis materi terenkripsi, kata itu harus hilang selamanya jika tidak, apa gunanya mengenkripsi kata itu?
mdpc
3
@mdpc Present tense, ia memiliki akses saat ini ke sistem file.
Patrick
Pertanyaan yang sama pada Pengguna Super: Kata sandi LUKS hilang, partisi terenkripsi terbuka (tidak dijawab).
G-Man Mengatakan 'Reinstate Monica'

Jawaban:

40

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)

devicedan volume_nameharus ditetapkan dengan tepat.
volume_nameadalah 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-fileuntuk 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.

Patrick
sumber
Saya tidak yakin jika saya melakukan sesuatu yang salah tetapi LUKS saya tidak menunjukkan string sama sekali seperti yang Anda tunjukkan dalam contoh. Ini sedikit 9 ​​angka. Tambang saya juga ditampilkan sebagai "linear 8: 3".
slm
@slm Jika ditampilkan linear, maka itu bukan volume LUKS terbuka (nilai yang salah untuk volume_namedalam perintah yang diberikan). Volume LUKS terbuka akan ada cryptdi bidang ke-3. Dalam cryptsetup luksOpen /dev/foo bar, volume_namenilainya akan bar.
Patrick
Mengerti sekarang Ada volume di bawah /dev/mappernama luks-...... Itu volume yang harus Anda gunakan, bukan LVM, volume logis yang dipetakan.
slm
1
Tampaknya dengan versi dmsetup terbaru format dmsetup tabletelah berubah. Setidaknya bagi saya kunci master ditampilkan di kolom $6.
Karol Babioch
@ KarolBabioch Anda mungkin tidak menentukan nama volume?
frostschutz