Script LUKS diabaikan… meminta kata sandi

10

Mari saya mulai dengan mengatakan saya bukan orang baru di LUKS. Saya telah menyiapkan LUKS dengan skrip kunci beberapa kali dengan dan tanpa LVM. Saya tidak yakin apa yang sebenarnya terjadi di sini. Saya memiliki sistem yang memiliki partisi terenkripsi tunggal. Drive saya diatur sebagai berikut:

# lsblk

NAMA MAJ: MIN RM UKURAN RO TYPE MOUNTPOINT
sda 8: 0 0 128G 0 disk  
└─sda1 8: 1 0 128G 0 bagian  
  ├─vg0-root 253: 1 0 20G 0 lvm /
  ├─vg0-secure 253: 6 0 100M 0 lvm   
  │ └─secure 253: 7 0 98M 0 crypt / root / secure
  └─vg0-swap 253: 4 0 1G 0 lvm [SWAP]

/etc/crypttabFile saya terlihat seperti ini

# UUID tidak diperlukan di sini karena jalur ke LV tidak akan berubah
secure / dev / vg0 / secure none luks, keyscript = / lib / cryptsetup / scripts / insecure

/lib/cryptsetup/scripts/insecureFile saya dapat dieksekusi dan terlihat seperti ini

#!/bin/sh
# My actual file looks somewhat different because it dumps the key file with dd.
# This accomplishes virtually the same thing though.

echo -n "my-encryption-password"

Saya telah menjalankan update-initramfs -k all -ubeberapa kali setelah mengkonfigurasi crypttab dan meletakkan file keyscript saya di tempatnya.

Sejauh yang saya tahu, file skrip saya bahkan tidak disalin ke file initrd.img. Sekarang saya berpikir tentang hal itu, saya tidak berpikir itu akan disalin ke file initrd.img karena partisi root tidak dienkripsi dan file skrip harus mudah diakses dari sana.

Setelah reboot, sistem melihat catatan dari crypttab dan meminta kata sandi (yang dalam kasus saya sebenarnya tidak ada karena satu-satunya kunci adalah file keyfile penuh bit acak) daripada menggunakan skrip kunci untuk membuka kunci partisi LUKS. Saya telah mencoba mengeluarkan LUKS dari LVM dan meletakkannya di sda2, dan hasilnya sama. Saya juga tahu bahwa naskah kunci berfungsi karena cryptsetup luksOpen /dev/vg0/secure secure -d - <<< "$(/lib/cryptsetup/scripts/insecure)"berfungsi seperti pesona dan mendekripsi partisi LUKS saya.

Saya sudah mencoba ini di Ubuntu 16.04.2 dan Ubuntu Mate 16.04.2 dengan hasil yang sama. Saya telah menggunakan skrip kunci sebelumnya tanpa masalah. Satu-satunya perbedaan adalah bahwa, di masa lalu, partisi / saya selalu dienkripsi. Jika ada yang bisa menjelaskan, saya akan menghargainya. Saya hanya ingin partisi terenkripsi yang sangat kecil karena saya berencana untuk mengkloning sistem ini, dan saya tidak ingin mengkloningnya dengan seluruh / partisi yang dienkripsi.


PEMBARUAN 2017-04-26

Dalam menggali log, saya menemukan garis dengan kesalahan berikut yang tidak masuk akal. Sejak kapan 'keyscript = / path / to / script' merupakan opsi yang tidak diketahui untuk crypttab?

... systemd-cryptsetup [737]: Menemukan opsi yang tidak diketahui / etc / crypttab 'keyscript = / lib / cryptsetup / scripts / insecure', abaikan.

Hanya untuk iseng, saya mencoba menghapus opsi keyscript dan menggunakan keyfile, dan semuanya berhasil! Bahkan, saya mencoba opsi lain seperti keyfile-offset, dan mereka bekerja juga. Oleh karena itu, masalahnya terletak di suatu tempat dengan opsi naskah. Adakah yang tahu mengapa?

b_laoshi
sumber
3
Saya pikir systemd adalah masalah Anda. Google cepat untuk systemd dan keyscript menunjukkan bug dan permintaan tarik untuk mengimplementasikan keyscript di systemd di sini . Bahkan ada solusi yang tersedia dari tautan pertama.
sergtech
Ini telah menjadi kecurigaan saya dan saya terus menggali masalah saya dan hasil pencarian yang saya temukan online. Saya mencoba beberapa rekomendasi di sini , tetapi saya tidak yakin bagaimana cara memasukkan file skrip ke initrd.
b_laoshi

Jawaban:

3

Coba opsi "initramfs" di / etc / crypttab Anda (sesuai dengan /unix//a/447676/356711 ). Anda /etc/crypttabkemudian akan terlihat seperti ini:

# UUID is not required here since the path to the LV won't change
secure      /dev/vg0/secure       none      luks,keyscript=/lib/cryptsetup/scripts/insecure,initramfs

Harap dicatat bahwa itu mungkin masalah bahwa root fs Anda ada dalam wadah LVM. Masalah ini juga disebutkan dalam artikel yang ditautkan di atas: " Tapi ini saat ini hanya berfungsi (andal) jika perangkat root tidak ada dalam LVM. " Untungnya, sepertinya solusi disediakan.

Sistem saya terlihat seperti ini:

$ lsblk
NAME                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                             8:0    0 931.5G  0 disk
└─sda1                          8:1    0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdb                             8:16   0 931.5G  0 disk
└─sdb1                          8:17   0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdc                             8:32   0 465.8G  0 disk
├─sdc1                          8:33   0   953M  0 part  /boot
└─sdc2                          8:34   0 464.8G  0 part
  └─sdc2_crypt                253:0    0 464.8G  0 crypt
    ├─system_crypt_vg-data_lv 253:1    0   447G  0 lvm   /
    └─system_crypt_vg-swap_lv 253:2    0  17.8G  0 lvm   [SWAP]

... dan yang berikut /etc/crypttabmelakukan sihir dekripsi dengan keyscript (!) di Ubuntu 18.04.2 LTS:

$ cat /etc/crypttab
# <target name> <source device>                           <key file> <options>
sdc2_crypt      UUID=[...]                                none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh
md1_crypt       /dev/md1                                  none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh,initramfs

Perhatikan bahwa dekripsi sdc2_cryptdengan kunci naskah yang disediakan berfungsi tanpa opsi initramfs (karena mengandung root fs dan karenanya "secara otomatis" dipertimbangkan dalam fase boot initramfs). md1_crypthanya didekripsi selama fase boot initramfs (dan dengan demikian dengan keyscript sesuai dengan entri crypttab) setelah saya menambahkan opsi initramfs. Dekripsi md1_crypt di kemudian hari selama fase boot systemd tidak berfungsi dengan keyscript yang diberikan dalam crypttab karena "systemd cryptsetup" tidak mendukung opsi keycript, lihat https://github.com/systemd/systemd/pull/3007 .

Thomas Popp
sumber