Desbloqueia a partição do sistema de arquivos não raiz do LUKS na inicialização

0

Eu tenho um sistema com uma partição / não criptografada no Ubuntu 16.04, mas com um zpool zFS criptografado pelo LUKS em 3 partições. Para que o sistema seja inicializado corretamente, desejo que os volumes criptografados do LUKS sejam desbloqueados antes que o ZFS e outros serviços (como banco de dados, web, email, etc.) sejam iniciados, e isso precisa ser feito remotamente, por meio do SSH.

Com as 3 partições adicionadas ao /etc/crypttab , o sistema inicializa e logo após o estágio initramfs aguardará o desbloqueio (e solicitará senhas). No entanto, a maneira usual de realizar o desbloqueio do LUKS na inicialização remotamente é feita através de dropbear in initramfs , mas como as 3 partições não estão em fstab , o sistema irá ' initramfs por assim dizer e continuará %código%. Isso é indesejável nesse caso, pois systemd prioriza systemd sobre crypttab ou OpenSSH , o que significa que o desbloqueio remoto está desativado.

Um truque sujo que funciona é simplesmente adicionar dropbear no initramfs, dando tempo para você fazer o login através de sleep 300 e desbloquear, no entanto isso também é indesejável. Vejo duas opções para corrigir isso, mas não tenho certeza qual seria a melhor e não sei como implementar:

  • Alterar a ordem de inicialização de dropbear , para garantir que algo como systemd e networking esteja acima de OpenSSH , permitindo o desbloqueio remoto ou local.

  • Ter crypttab espera que as partições não triviais sejam desbloqueadas antes de prosseguir para initramfs .

por brickmasterj 02.04.2018 / 22:36

1 resposta

0

Atualmente, estou configurando esse sistema, mas no debian stretch. E estou fazendo minha experimentação em uma VM antes de configurar o próprio computador físico. Eu tenho uma configuração muito semelhante trabalhando na VM.

2 discos no zpool mirror para /, mas não / boot. / boot está no md0. zpool está no topo do LUKS. Usando o EFI.

root@zstaging:~# cat /proc/1/comm
systemd

root@zstaging:~# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   20G  0 disk
+-sda1            8:1    0  256M  0 part
¦ +-md0           9:0    0  256M  0 raid1 /boot
+-sda2            8:2    0  256M  0 part  /boot/efi
+-sda3            8:3    0 19.5G  0 part
¦ +-disk0_crypt 253:0    0 19.5G  0 crypt
+-sda9            8:9    0    9M  0 part
sdb               8:16   0   20G  0 disk
+-sdb1            8:17   0  256M  0 part
¦ +-md0           9:0    0  256M  0 raid1 /boot
+-sdb2            8:18   0  256M  0 part
+-sdb3            8:19   0 19.5G  0 part
¦ +-disk1_crypt 253:1    0 19.5G  0 crypt
+-sdb9            8:25   0    9M  0 part
sdc               8:32   0   20G  0 disk
sr0              11:0    1  1.8G  0 rom

root@zstaging:~# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME             STATE     READ WRITE CKSUM
        rpool            ONLINE       0     0     0
          mirror-0       ONLINE       0     0     0
            disk0_crypt  ONLINE       0     0     0
            disk1_crypt  ONLINE       0     0     0

errors: No known data errors

Arquivos relevantes e configuração:

root@zstaging:~# cat /etc/fstab
UUID=648bfa4b-1b5f-480a-bb26-b3abffb4a6de /boot auto defaults 0 0
PARTUUID=1673f966-173b-4128-84d5-4e8d5810efef /boot/efi vfat defaults 0 1

root@zstaging:~# cat /etc/crypttab
disk0_crypt UUID=26194846-ba49-4e53-ab0b-857b0dad2021 none luks
disk1_crypt UUID=ef44b66a-8706-4be2-bd12-a30d40de9669 none luks

root@zstaging:~# cat /etc/initramfs-tools/conf.d/cryptroot
target=disk0_crypt,source=UUID=26194846-ba49-4e53-ab0b-857b0dad2021,key=none,rootdev
target=disk1_crypt,source=UUID=ef44b66a-8706-4be2-bd12-a30d40de9669,key=none,rootdev

set CRYPTSETUP=y in /etc/cryptsetup-initramfs/conf-hook

# vi /etc/default/grub
replace GRUB_CMDLINE_LINUX="" with GRUB_CMDLINE_LINUX="boot=zfs"
Remove quiet from: GRUB_CMDLINE_LINUX_DEFAULT
Uncomment: GRUB_TERMINAL=console

# update-initramfs -u -k all
# update-grub
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-floppy

Tudo funciona bem. Obtenha um aviso para desbloquear os dois discos, um de cada vez, e vamos embora. NÃO é necessário listar qualquer material do zfs em / etc / fstab. Sim, initramfs, etc. Reclamarão do / etc / fstab, mas tudo funciona bem, até agora

Eu posso até desbloqueá-lo remotamente

# apt-get install dropbear-initramfs busybox
# vi /etc/dropbear-initramfs/authorized_keys
Paste my SSH pubkey

# chmod 400 /etc/dropbear-initramfs/authorized_keys
# update-initramfs -u

in another machine that has my SSH keys, add a custom section in ~/.ssh/config:
  Host zstaging_unlock
  HostName <ip_of_zstaging>
  User root
  HostKeyAlias zstaging_unlock

to remote unlock zstaging, from remote machine:
$ ssh zstaging_unlock
and follow prompts

HTH

    
por 04.04.2018 / 06:43