Desbloqueio de LUKS com um dispositivo USB no Boot
Autor: * Coffnix
"Home Network Defense"
Utilize criptografia pra tudo
Motivo
Pelo visto você é um bom menino (ou menine kekekeke), que criptografou seu disco certinho, e seguiu as boas práticas recomendadas pelo área31 hackerspace lendo os artigos HackForge e aprendeu até a criar seu próprio storage criptografado em roteador residencial. Logo, agora vc não quer ficar digitando senha do Luks durante o processo de BOOT, correcto? okay, vamos lá...
Requisitos
Aqui utilizamos OpenSUSE com Dracut + GRUB, mas você tem liberdade de utilizar em qualquer distro, adapte somente os comandos e arquivos caso utilize um initrd diferente.
Procedimento
Crie a chave
Crie uma partição FAT32 em um pendrive de pelo menos 100mb e formate:
root # mkfs.vfat -F 32 /dev/sdx1
Monte em /extkey e crie a chave:
root # mkdir -p /extkey ; mount /dev/sdx1 /extkey root # dd if=/dev/urandom of=/extkey/keyfile bs=4096 count=1
Adicione a nova chave ao Luks, alterando de /dev/nvme0n1p6 para seu dispositivo que contém o volume Luks, seja com ou sem LVM. Ex:
root # cryptsetup luksAddKey /dev/nvme0n1p6 /extkey/keyfile
Configure o dracut
Adicione o arquivo crypttab ao initrd:
/etc/dracut.conf.d/crypttab.conf
install_items+=" /etc/crypttab "
Adicione ao initd os modulos necessários para uso do USB device e seu sistema de arquivos:
/etc/dracut.conf.d/50-extkey.conf
add_drivers+=" hid-logitech-dj xhci_hcd usbhid usb-storage ext4 vfat nls_cp437 nls_iso8859-1 "
add_fstab+=" /etc/fstab.rootkey "
Obtenha o UUID da partição VFAT para configurar o fstab e o crypttab:
root # blkid | grep sdc1 /dev/sdc1: UUID="43A0-9872" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="09de3d52-01"
Agora configure o fstab da raiz:
/etc/fstab
UUID=43A0-9872 /extkey vfat noauto,nofail 0 0
E configure o fstab que irá ser utilizado pelo dracut:
/etc/fstab.rootkey
UUID=43A0-9872 /extkey vfat noauto,nofail 0 0
Configure o crypttab:
/etc/crypttab
#cr_nvme-eui.000000000000000100a075233f141b69-part6 UUID=a067b3b0-b2c2-403c-8f7c-6221c2656b09 none x-initrd.attach
cr_nvme-eui.000000000000000100a075233f141b69-part6 UUID=a067b3b0-b2c2-403c-8f7c-6221c2656b09 /keyfile:UUID=43A0-9872 keyfile-timeout=5
Crie o novo initrd
root # dracut --force --regenerate-all --verbose
Caso esteja em ambiente chroot:
root # dracut --hostonly --kver 6.5.9-1-default -f
Atualize o grub
Altere o arquivo de configuração do grub:
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/system/swap security=apparmor mitigations=auto"
GRUB_CMDLINE_LINUX="rhgb quiet"
Atualize o grub.conf:
root # update-bootloader
Reboot e seja feliz!