GNU/Linux >> Znalost Linux >  >> Linux

Použití jediné přístupové fráze k odemknutí více šifrovaných disků při spouštění

Distribuce založené na Debianu:

Debian a Ubuntu dodávají skript pro ukládání hesel do mezipaměti decrypt_keyctl pomocí cryptsetup balíček.

decrypt_keyctl skript poskytuje stejné heslo více zašifrovaným cílům LUKS, což vám ušetří jeho opakované psaní. Lze jej povolit v crypttab s keyscript=decrypt_keyctl volba. Stejné heslo se používá pro cíle, které mají stejný identifikátor v pole souboru klíčů . Heslo při spouštění pro každý identifikátor je požadováno jednou.

Příklad 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

decrypt_keyctl skript závisí na keyutils balíček (který je pouze doporučený, a proto nemusí být nutně nainstalován).

Po aktualizaci cryptab , budete také muset aktualizovat initramfs, abyste použili změny. Použijte update-initramfs -u .

Úplný soubor readme pro decrypt_keyctl se nachází v /usr/share/doc/cryptsetup/README.keyctl

Toto bohužel momentálně nefunguje na systémech Debian používajících systemd init kvůli chybě (ostatní init systémy by neměly být ovlivněny). S touto chybou vás systemd podruhé požádá o heslo, což znemožňuje vzdálené odemknutí přes ssh. Debian manuálová stránka krypttabu navrhuje jako řešení použít initramfs možnost vynutit zpracování ve fázi zavádění initramfs. Abychom tuto chybu obešli, příklad pro /etc/crypttab v Debianu

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

Distribuce, které neposkytují decrypt_keyctl skript:

Pokud decrypt_keyctrl není poskytován vaší distribucí, zařízení lze odemknout pomocí souboru klíče v šifrovaném kořenovém systému souborů. To, když lze kořenový souborový systém odemknout a připojit dříve než jakákoli jiná šifrovaná zařízení.

LUKS podporuje více slotů pro klíče. To vám umožňuje alternativně odemknout zařízení pomocí hesla, pokud je soubor klíče nedostupný/ztracený.

  1. Vygenerujte klíč s náhodnými daty a nastavte jeho oprávnění na čitelná pouze pro vlastníka, aby nedošlo k jeho úniku. Všimněte si, že soubor klíče musí být v kořenovém oddílu, který se odemkne jako první.

     dd if=/dev/urandom of=<path to key file> bs=1024 count=1
     chmod u=rw,g=,o= <path to key file>
    
  2. Přidejte klíč do svého zařízení LUKS

     cryptsetup luksAddKey <path to encrypted device> <path to key file>
    
  3. Nakonfigurujte crypttab k použití souboru klíče. První řádek by měl být kořenové zařízení, protože zařízení se odemykají ve stejném pořadí, jak je uvedeno v crypttab . Použijte absolutní cesty pro soubory klíčů.

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

Další možností je použít /lib/cryptsetup/scripts/decrypt_derived skript, který je také součástí cryptsetup v Debianu/Ubuntu.

Místo uložení klíče do mezipaměti použijete klíč hlasitosti jednoho disku jako další heslo pro druhý disk. To vyžaduje přidání druhého hesla na druhý (a třetí atd.) šifrovaný disk, ale LUKS to podporuje. Toto řešení tedy funguje i v případě, že vaše více šifrovaných disků nepoužívá stejné heslo.

Příklad přidání klíče z sda6crypt do sda5:

Přidejte klíč svazku sda6crypt jako další heslo pro sda5:

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

Nakonfigurujte sda5crypt tak, aby se automaticky odemykal v /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

Toto používá pojmenovaný kanál (fifo ) předat klíč, abyste nemuseli ukládat klíč hlasitosti do dočasného souboru na disku.

keyscript možnost funguje pouze v případě, že crypttab je zpracován původními nástroji pro šifrování Debianu, reimplementace systemd jej aktuálně nepodporuje. Pokud váš systém používá systemd (což je většina systémů), potřebujete initramfs možnost vynutit zpracování v initrd nástroji cryptsetup před spuštěním systemd.

Na základě https://unix.stackexchange.com/a/32551/50793


Zde je moje řešení na debianu, vzhledem k výše uvedené chybě @sebasth.

Moje nastavení je trochu jiné. Mám zašifrovaný kořenový oddíl a hromadu raid disků. Pro mě jsem musel do krypttabu přidat možnost initramfs:

<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

To sděluje aktualizaci-initramfs, že chci mít tyto položky crypttab připojené v initramfs. Zkontroloval jsem svůj crypttab spuštěním

cryptdisks_start part1_crypt
cryptdisks_start part2_crypt

Všimněte si, že moje raid disky jsou obyčejné dm-crypt. To znamenalo, že jsem nemohl použít metodu luks keyfile, která řeší chybu keyscript systemd. Pro prostý dm-crypt bych musel ukládat přístupovou frázi v prostém textu.

Balíček keyutils musí být nainstalován a šifrované disky musí být připojeny před update-initramfs je spuštěn; jinak to bude házet chyby. Když byl můj initramf sestaven, musel jsem hledat následující řádky:

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

který ukázal následující dva soubory:

/bin/keyctl
cryptkeyctl

přidávání do initramfs.

Nakonec jsem musel deaktivovat systemd obsluhu mého crypttabu, abych se vypořádal s chybou uvedenou výše:systemd nepodporuje volbu keyscript v crypttab. Za tímto účelem jsem přidal volbu jádra

GRUB_CMDLINE_LINUX_DEFAULT="quiet luks.crypttab=no"     

do /etc/default/grub a spustil update-grub . systemd nyní ignoruje crypttab a všechny zašifrované oddíly jsou načteny v initramfs.

Protože mám zašifrovaný kořenový oddíl, nezdá se, že by cryptroot ukládal můj klíč do mezipaměti. To znamená, že musím zadat své heslo dvakrát; jeden pro kořenový oddíl a jeden pro mé pole raid.


Linux
  1. Vytvořte šifrovanou úschovnu v systému Linux

  2. SSH bez hesla pomocí párů veřejného a soukromého klíče

  3. Linux – využití prostoru před 1. oddílem USB flash disku jako Luks Key?

  1. Jak přejmenovat více souborů pomocí funkce Najít?

  2. Jak vynukovat vaši šifrovanou instalaci Kali

  3. Rozdělte jeden účet cPanel na více účtů pomocí SSH

  1. Použití stejného soukromého klíče SSH na více počítačích

  2. SSH z A přes B do C pomocí soukromého klíče na B

  3. Používáte fsck ke kontrole a opravě šifrovaného disku LUKS?