Proxmox: Desencriptar outros discos (Parte 3)

Se tiver mais do que um disco ligado, pode querer encriptar esse armazenamento adicional, mas sem ter de introduzir uma senha para cada disco. Para isso, podemos criar um /keyfile em / que, uma vez montado, pode ser usado para desencriptar todos os outros discos. Em vez de uma senha, este ficheiro de chave será utilizado. É crucial manter este ficheiro seguro: se alguém o conseguir obter, poderá desencriptar os seus outros discos.

Primeiro, crie um ficheiro de chave:

Bash
dd bs=512 count=4 if=/dev/random of=/keyfile iflag=fullblock
# Certifique-se de que apenas o root pode ler este ficheiro
chmod 600 /keyfile

Agora adicione-o como uma chave ao seu disco encriptado. Como encriptar discos não encriptados existentes está fora do âmbito aqui, mas está bem documentado:

Bash
cryptsetup luksAddKey /dev/sdXY /keyfile

Introduza qualquer outra coisa que desbloqueie o disco. Note que é altamente recomendável também ter uma frase-passe que desencripte o disco, mesmo que geralmente não seja utilizada. Guarde-a no seu gestor de palavras-passe. Poderá ser útil se perder o ficheiro de chave. E, novamente, faça uma cópia de segurança do cabeçalho após executar este comando.

Em seguida, adicione uma nova linha ao /etc/crypttab com o novo disco. Isto garante que seja desbloqueado automaticamente:

Bash
echo "cryptlvm UUID=$(blkid -s UUID -o value /dev/sdXY | tr -d '\n') /keyfile luks" >> /etc/crypttab

Adicionar Desbloqueio SSH O último passo é permitir o desbloqueio remoto. Os servidores tendem a estar em locais de difícil acesso, portanto, se puder desbloqueá-los remotamente, é uma grande vantagem. Para isso, vamos usar o dropbear. Deveria tê-lo instalado anteriormente. Se não o fez, volte e siga esses passos agora. Esta secção baseia-se amplamente no excelente guia de Vivek, pelo que recomendo que o consulte, pois as minhas instruções aqui são muito resumidas, enquanto o artigo dele tem explicações muito melhores.

Primeiro, configuramos o dropbear-initramfs com a seguinte linha em /etc/dropbear/initramfs/dropbear.conf

Bash
DROPBEAR_OPTIONS="-s -c cryptroot-unlock"

Também precisamos garantir que tenhamos uma chave SSH permitida para a ligação. Adicione a sua chave pública a /etc/dropbear-initramfs/authorized_keys, por exemplo:

Bash
echo 'ssh-rsa ...' >> /etc/dropbear-initramfs/authorized_keys

Depois, assegure-se de ter um IP ao qual possa ligar via SSH. Pode configurá-lo como desejar; escolhi um IP estático. Edite /etc/default/grub e adicione o parâmetro kernel ip=, para que fique como neste exemplo. Nota: Não apague outros parâmetros se estiverem lá, apenas adicione este novo.

Bash
GRUB_CMDLINE_LINUX_DEFAULT="quiet ip=192.168.1.193:::::enp4s0"

Encontre o nome da sua interface executando ip link. Nos meus testes, isso funcionou bem, mas se o kernel renomear interfaces posteriormente, poderá ter mais sucesso com eth0 do que com enp4s0 ou qualquer outro que ip link indique.

Estas duas mudanças devem ser suficientes; a única outra mudança realmente importante é garantir que /etc/crypttab e /etc/fstab estejam configurados corretamente. Se estiverem incorretos, os comandos seguintes lerão valores errados e o arranque não funcionará, por isso talvez seja bom verificar agora. Parece correto? Pode compará-lo com a saída de mount.

Bash
update-grub update-initramfs -c -k all

O primeiro passo atualiza a configuração do grub. O segundo passo atualiza o initramfs. O arranque neste setup ocorre na seguinte ordem: UEFI -> Grub -> Initramfs -> Sistema operativo completo.

Para garantir que update-grub funcionou, verifique /boot/grub/grub.cfg. Deve ver que a primeira entrada do menu não tem insmod lvm e, em vez disso, faz referência diretamente a uma partição. Por alguma razão, quando o executei pela primeira vez, não atualizou corretamente o ficheiro, pelo que é bom verificar. A entrada do menu abaixo de ### BEGIN /etc/grub.d/10_linux ### deve ter uma linha linux que inclui o parâmetro kernel ip=. Se estiver lá, sabe que é uma configuração nova. Se não estiver, talvez faça uma cópia de segurança do ficheiro e tente novamente. Depois compare.

Para garantir que o initramfs está correto, execute lsinitramfs /boot/initrd.img- | grep dropbear e procure de forma semelhante por cryptsetup. Nada disto garante que o arranque funcionará, mas se algum deles não retornar saída, é provável que o arranque não funcione, pelo que é bom voltar e verificar primeiro.

Boot

Se chegou até aqui, parabéns! Estamos quase lá. É hora de reiniciar e, se tudo correr bem, deverá ver um prompt para desencriptar. Primeiro, execute exit para sair do ambiente chroot. Depois cd / e umount -R /mnt/new.

Um passo opcional é substituir a entrada de arranque UEFI antiga, pois atualmente ambas são chamadas “proxmox”, o que pode ser confuso. Depois de tudo estar a funcionar, provavelmente quererá remover completamente a entrada antiga, mas por agora mantenha-a. Como não pode renomear diretamente uma entrada, terá de criar uma nova e excluir a antiga. Se não instalou efibootmgr no início, faça-o agora, se desejar fazer isso.

Primeiro, execute efibootmgr -v para ver o que está atualmente lá. Agora, crie uma nova entrada para o antigo disco EFI (assumido como /dev/sda2 no nosso exemplo inicial):

Bash
# Compare o caminho do ficheiro com o que efibootmgr -v mostrou. Note que / é traduzido automaticamente para .

efibootmgr --create-only --disk /dev/sda --part 2 --loader /EFI/proxmox/grubx64.efi --label "Proxmox não encriptado" -v

Observe a saída e encontre a nova entrada; depois anote o HD(X,GPT,) e encontre a entrada proxmox correspondente. Existem duas chamadas “proxmox”. Aquela que corresponder é a antiga, e a que for diferente é a nova. Encontre o número de arranque (Boot000X) e elimine-o:

Bash
efibootmgr -B -b 000X -v

Agora deve haver apenas uma entrada chamada “proxmox” e outra rotulada “Proxmox não encriptado”. Por fim, verifique a ordem de arranque. Se “proxmox” não estiver antes de “Proxmox não encriptado”, pode alterá-lo na BIOS/UEFI ou utilizando o parâmetro –bootorder (consulte man 8 efibootmgr).

Agora reinicie.

Durante o arranque, pode querer verificar a ordem de arranque e/ou desconectar a unidade USB. Se tudo correu conforme planeado, deverá ser solicitado a introduzir uma frase-passe, e o dropbear deverá mostrar o seu IP. Tente ssh root@ para verificar se funcionou. Se o desbloqueio através da rede não funcionou, mas conseguir desbloquear utilizando o teclado ligado, tente isso. Se funcionar, poderá acabar com um sistema funcional e corrigir o dropbear a partir dele. Se não funcionar, provavelmente terá de regressar ao Debian live e fazer a depuração a partir daí.

Artigos Relacionados