Desbloqueio de LUKS com um dispositivo USB no Boot

De Área31 Hackerspace
Membro do hackerspace feliz por ter um Linux criptografadinho com LUKS, e desbloqueável com um device USB, dufuturu.
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!

Cookies nos ajudam a entregar nossos serviços. Ao usar nossos serviços, você concorda com o uso de cookies.