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:
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:
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:
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
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:
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.
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.
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):
# 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:
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í.