Açılışta birden fazla şifreli diskin kilidini açmak için tek bir parola kullanma


23

Makinemde, sistemi kurduğum bir SSD ve büyük ve / veya çok sık kullanılan dosyalar için depolama alanı olarak kullandığım bir HDD var. Her ikisi de şifreli, ancak onlar için aynı parolayı kullanmayı seçtim. SSD'ye /ve HDD'ye monte edilmiştir /usr/hdd(her bir kullanıcının üzerinde bir dizin vardır ve ana dizinden istedikleri gibi bağlantı yapabilir).

Sistem önyüklendiğinde, derhal SSD için bir parola ister ve HDD için olandan birkaç saniye sonra (otomatik olarak monte edilir) sorar. Her iki parolanın da aynı olduğu göz önüne alındığında, sistemi yalnızca bir kez soracak şekilde yapılandırmanın bir yolu var mı?


Büyük olasılıkla expectsistemin bunu yapmak yerine diskleri monte etmek için çağrılan bir komut dosyası veya benzeri bir yazı yazabilirsiniz . Bunun yerine, sistem parola isteyecek olan betiği arayacak, saklayacak ve her montaj işleminde bunu sağlayacaktır.
h3rrmiller

Fikrinizi doğru anlarsam, SSD'ye uygulanamaz, çünkü sistemin önyüklendiği yer burasıdır. Fakat daha sonra, HDD'nin parolasını ayrı ayrı yazmam gerekeceği için anlamsız hale geliyor. Ya da hayır?
doublep

/etc/crypttab İkinci sürücünün kilidini açmak için kullanabilirsiniz .
jasonwryan

1
@ jasonwryan eğer bir cevap için genişletilebilir eğer o zaman ... cevaplar yorum olarak değil, cevap olarak gönderilmelidir.
derobert

1
@derobert bazen insanların iyi bir cevap yazmak için zamanları veya eğilimleri olmaz.
jasonwryan

Yanıtlar:


24

Debian tabanlı dağıtımlar:

Debian ve Ubuntu , cryptsetup paketi ile birlikte decrypt_keyctl betiğini önbelleğe alan bir şifre gönderir .

decrypt_keyctl betiği, şifrelenmiş birden fazla LUKS hedefine aynı şifreyi sağlayarak, birden çok kez yazmanıza olanak tanır . Crypttab'dakeyscript=decrypt_keyctl seçenek ile etkinleştirilebilir . Aynı parola, anahtar dosya alanında aynı tanımlayıcıya sahip olan hedefler için kullanılır . Her tanımlayıcı için önyükleme şifresinde bir kez sorulur.

Örnek bir crypttab :

<target>      <source>         <keyfile>      <options>
part1_crypt   /dev/disk/...    crypt_disks    luks,keyscript=decrypt_keyctl
part2_crypt   /dev/disk/...    crypt_disks    luks,keyscript=decrypt_keyctl

Kriptabınızı güncelledikten sonra , değişiklikleri uygulamak için initramfs dosyasını da güncellemeniz gerekir. Kullanın update-initramfs -u.

Decrypt_keyctl için tam benioku bulunur /usr/share/doc/cryptsetup/README.keyctl

Ne yazık ki, bu şu anda bir hata nedeniyle systemd init kullanan Debian sistemlerinde çalışmıyor (diğer init sistemleri etkilenmemelidir). Debian crypttab kılavuz sayfasıinitramfs , önyüklemenin initramfs aşamasında işlemeyi zorlamak için kullanılacak seçeneği kullanmak için bir çözüm önerdi .


Decrypt_keyctl betiği sağlamayan dağıtımlar :

Eğer decrypt_keyctrl Dağıtımınız tarafından sağlanmıyorsa, cihaz şifrelenmiş kök dosya sisteminde bir keyfile kullanılarak açılabilir. Bu, kök dosya sistemi diğer şifreli cihazlardan önce açılabilir ve monte edilebilir.

LUKS, birden fazla anahtar yuvasını destekler. Bu, anahtar dosya kullanılamıyorsa / kaybolursa, alternatif olarak şifreyi şifreyle açmanızı sağlar.

  1. Anahtarı rastgele verilerle oluşturun ve izinlerini yalnızca sızıntı yapmamak için okunabilir olarak ayarlayın. Anahtar dosyasının, önce kilidi açılmış olan kök bölümünde olması gerektiğini unutmayın.

    dd if=/dev/urandom of=<path to key file> bs=1024 count=1
    chmod u=rw,g=,o= <path to key file>
    
  2. Anahtarı LUKS cihazınıza ekleyin.

    cryptsetup luksAddKey <path to encrypted device> <path to key file>
    
  3. Anahtar dosyayı kullanmak için crypttab'ı yapılandırın . İlk satır root cihazı olmalıdır, çünkü cihazların şifreli olarak listelendiği sırayla kilidi açılır . Anahtar dosyalar için mutlak yollar kullanın.

    <target>      <source>         <keyfile>                  <options>
    root_crypt    /dev/disk/...    none                       luks
    part1_crypt   /dev/disk/...    <path to key file>         luks
    

Benioku ilk satırlarından çok umut verici görünüyor, teşekkür ederim. Bunu yarın kontrol edeceğim (şimdi yeniden başlatmak istemiyorum).
doublep

Ne yazık ki, çalışmıyor (değişmediği gibi). Bkz benimcrypttab (ı dokunun vermedi UUID=ve sistem yükleyicisi tarafından oluşturulan, ben bunun önemi gerektiği tahmin) ile sonuçlanan girişleri/var/log/syslog . Hatalar anlaşılabilir bir durumdur, ancak bunlar hakkında ne yapacağım hakkında hiçbir fikrim yok. Dosya /lib/cryptsetup/scripts/decrypt_keyctlvar, bu yüzden bilinmeyen bir seçenek hakkında neden şikayetçi olduğunu bilmiyorum. Ayrıca keyfile olarak belirtmek için hiçbir fikrim yok, ben hiçbir açıklama yerde ... bakınız
doublep

Decrypt_keyctl öğesinin initramfs içinde yer aldığını doğruladınız mı? Görüntüyü güncellerken ayrıntılı seçeneği kullanarak kontrol edin:, update-initramfs -u -k $(uname -r) -vçıkması gerekir Adding binary /lib/cryptsetup/scripts/decrypt_keyctl.
sebasth 16:17

1
İnitramfs görmek için içerir:lsinitramfs /boot/initrd.img-$(uname -r)
sebasth

3
Üzgünüm, şimdi ne daha fazla dikkat olduğunu update-initramfssöyledi, ben bunu fark: E: /usr/share/initramfs-tools/hooks/cryptkeyctl failed with return 1.. Biraz googling yaptıktan sonra, muhtemelen keyutilspakete ihtiyacım olduğunu öğrendim (gerçekten kurulmadı). Şimdi update-initramfsbaşarılı ve lsinitramfssöz ediyor decrypt_keytls. Bir sonraki açılıştan sonra güncellenecektir (muhtemelen yarın).
doublep

3

Debian'da benim geçici çözümüm, yukarıda belirtilen hata @sebasth.

Kurulumum biraz farklı. Şifreli bir kök bölümü ve bir sürü baskın diskim var. Benim için crypttab'a bir initramfs seçeneği eklemek zorunda kaldım:

<target>      <source>         <keyfile>      <options>
part1_crypt   /dev/disk/...    crypt_disks    plain,cipher=aes-xts-plain64,keyscript=decrypt_keyctl,initramfs
part2_crypt   /dev/disk/...    crypt_disks    plain,cipher=aes-xts-plain64,keyscript=decrypt_keyctl,initramfs

Bu, initramfs güncelleştirmesine initramfs içine bu crypttab girişlerinin monte edilmesini istediğimi söyler. Kripttabımı çalıştırarak kontrol ettim

cryptdisks_start part1_crypt
cryptdisks_start part2_crypt

Baskın disklerimin düz dm-crypt olduğuna dikkat edin. Bu, systemd keyscript hatası etrafında çalışan luks keyfile yöntemini kullanamayacağım anlamına geliyordu. Düz dm-crypt için parolayı düz metin olarak saklamak zorunda kalacağım.

Şifrelenmiş disklerin update-initramfsçalıştırılmadan önce takılması gerekir ; Aksi takdirde hata atar. İnitramfs kurulurken aşağıdaki satırlara bakmak zorunda kaldım:

update-initramfs -k -u -v | grep 'keyctl'

hangi iki dosyayı gösterdi:

/bin/keyctl
cryptkeyctl

initramfs'a ekleniyor.

Son olarak, yukarıda belirtilen hatayı gidermek için crypttab'ımı kullanıp systemd'yi devre dışı bırakmak zorunda kaldım: systemd, crypttab'daki keyscript seçeneğini desteklemiyor. Bunun için çekirdek seçeneğini ekledim

GRUB_CMDLINE_LINUX_DEFAULT="quiet luks.crypttab=no"     

/ etc / default / grub ile koştu update-grub. systemd şimdi crypttab'ı yok sayar ve tüm şifreli bölümler initramfs içine yüklenir.

Şifreli bir kök bölüme sahip olduğum için, anahtarımı önbelleğe almak için cryptroot görünmüyor. Bu, şifremi iki kez girmem gerektiği anlamına geliyor; kök bölüm için bir tane ve bir kez baskın dizilim için.


1

Diğer bir seçenek /lib/cryptsetup/scripts/decrypt_derivedde Debian / Ubuntu'daki cryptsetup'in bir parçası olan betiği kullanmaktır .

Anahtarı önbelleğe almak yerine, bir diskin ses seviyesi tuşunu ikinci disk için ek bir parola olarak kullanırsınız. Bu, ikinci (ve üçüncü, vb.) Şifreli diske ikinci bir şifre eklemeyi gerektirir, ancak LUKS bunu desteklemektedir. Bu nedenle bu çözüm, birden fazla şifreli diskiniz aynı şifreyi kullanmıyorsa da çalışır.

Anahtarı sda6crypt'dan sda5'e eklemek için örnek:

Sda6crypt'in ses seviyesi anahtarını sda5 için ek şifre olarak ekleyin:

mkfifo fifo
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > fifo &
cryptsetup luksAddKey /dev/sda5 fifo
rm fifo

Sda5crypt’in otomatik olarak kilidini açacak şekilde /etc/crypttab

ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,initramfs,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab

Bu fifo, ses anahtarını diskte geçici bir dosyada saklamak zorunda kalmamak için anahtarı geçmek için adlandırılmış bir pipe ( ) kullanır .

Bu keyscriptseçenek yalnızca crypttabDebian'ın orijinal şifreleme araçları tarafından işleniyorsa çalışır , sistem ve yeniden uygulama şu anda desteklememektedir. Sisteminiz systemd kullanıyorsa (ki bu çoğu sistemdir), initramfssystemd başlamadan önce cryptsetup araçları tarafından işlemeyi initrd'de gerçekleşmeye zorlama seçeneğine ihtiyacınız vardır .

Göre /unix//a/32551/50793


Söylemeliyim ki bu güzel bir çözüm Yarasadan çıktı, debian 10 buster'da hıçkırık!
Janus,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.