Instalei recentemente o Ubuntu 22.04 e usei a opção de criptografia de unidade completa ZFS + LUKS do instalador.
Tenho pesquisado na web uma maneira de configurar a unidade para desbloquear automaticamente na inicialização quando uma chave USB é detectada (chave de desbloqueio LUKS no pendrive) em vez de inserir uma senha de descriptografia toda vez que inicializo o sistema.
Encontrei vários guias, mas nenhuma de suas instruções parece ser aplicável à maneira como o 22.04 define as estruturas de particionamento na unidade ao usar o ZFS e o LUKS.
O guia mais próximo que estou seguindo está aqui: https://tqdev.com/2022-luks-with-usb-unlock
Tudo parece estar indo bem, até chegar ao ponto em que preciso adicionar a chave à unidade LUKS (etapa seis) - porque duas unidades estão listadas como unidades LUKS.
root@bob-home-linux:~# sudo blkid --match-token TYPE=crypto_LUKS -o device
/dev/sdc2
/dev/zd0
Não tenho certeza de como proceder a partir daqui!
Responder1
Atualização: 20 de março de 2024:Quando o Ubuntu faz um lançamento pontual (por exemplo: 22.04.3> 22.04.4), essas alterações são redefinidas e exigem refazer a etapa 13 e a etapa 20 novamente.
Instale o desktop Ubuntu 22.04 usando ZFS e criptografia usando o instalador do Ubuntu. Certifique-se de registrar a senha de criptografia com segurança para uso em uma etapa posterior. Não configurei uma chave de recuperação no instalador, portanto não sei se essas etapas funcionam ao usar uma chave de recuperação. YMMV.
Após a instalação, formate um drive USB e crie uma nova partição usando o padrão ext4 (usei o utilitário de discos no Ubuntu). Chame a partição de 'linux-key'.
Certifique-se de que a unidade USB esteja montada. Use o aplicativo 'arquivos' para verificar se o USB está montado na coluna esquerda da janela de arquivos.
Inicie um terminal e digite os seguintes comandos para mudar para root e depois para a unidade USB:
sudo su cd /media/<yourusername>/linux-key ls -la
Você deverá ver uma lista de diretórios vazia, mostrando que a unidade USB está vazia.
root@ubuntu:/media/bob/linux-key$ ls -la total 29 drwx------ 3 bob bob 4096 Jan 25 15:07 . drwxr-x---+ 3 root root 3 Jan 25 15:08 .. drwx------ 2 root root 16384 Jan 25 15:07 lost+found
Digite o seguinte para mostrar as partições LUKS em seu sistema. A partição padrão que precisamos modificar geralmente é /dev/zd0. Certifique-se de que seja mostrado ao executar o comando abaixo.
$ blkid --match-token TYPE=crypto_LUKS -o device /dev/sdc2 /dev/zd0
Crie o novo arquivo de chave de criptografia.
dd if=/dev/urandom bs=1 count=256 > linux.key
Certifique-se de que o arquivo-chave exista – você deverá ver o arquivo na listagem.
$ ls -la -rw-rw-r-- 1 root root 256 Jan 25 15:10 linux.key
Configure o arquivo-chave para funcionar com a partição e insira a senha de descriptografia configurada anteriormente no instalador.
cryptsetup luksAddKey /dev/zd0 linux.key
Verifique a inserção bem-sucedida da chave garantindo que o slot de chave 1 foi preenchido.
cryptsetup luksDump /dev/zd0;
... Area offset:32768 [bytes] Area length:258048 [bytes] Digest ID: 0 1: luks2 <------------- the key you just added Key: 512 bits Priority: normal Cipher: aes-xts-plain64 Cipher key: 512 bits PBKDF: argon2id ...
Ajustar permissões de arquivo-chave
chmod 400 linux.key
Em seguida, navegue até a pasta de scripts initramfs e abra o arquivo chamado ‘zfs’. Você pode usar qualquer editor de texto que desejar. (estou usando
nano
neste exemplo)cd /usr/share/initramfs-tools/scripts nano zfs
Encontre a linha a seguir e substitua-a pelo texto a seguir.
Encontre esta linha
echo "keystore-${pool} ${ks} none luks,discard" >> "${TABFILE}"
Substitua por isso
echo "keystore-${pool} ${ks} none luks,discard,tries=10,keyscript=/scripts/usb-unlock" >> "${TABFILE}"
Salve e feche o arquivo.
Crie um novo arquivo chamado ‘usb-unlock’ no mesmo diretório.
nano usb-unlock
Cole o script desta essência - isso verifica uma partição da unidade USB chamada 'linux-key', procura um arquivo chamado linux.key e tenta usá-lo para descriptografar a partição.
Salve e feche o arquivo.
Ajuste as permissões para o script usb-unlock
chmod 755 usb-unlock
Liste o diretório do script. Certifique-se de que os dois arquivos com os quais você acabou de trabalhar pertencem ao usuário root com um conjunto de permissões 755.
$ ls -la # you should see these files... -rwxr-xr-x 1 root root 550 Dec 22 20:38 usb-unlock -rwxr-xr-x 1 root root 31665 Dec 22 20:40 zfs
Por fim, atualize o initramfs para que ele execute o script durante a inicialização.
update-initramfs -u
Reinicie sua máquina, garantindo que a unidade USB esteja inserida. Se estiver inserido, você não precisará digitar sua senha de descriptografia. Se estiver faltando, o script voltará a solicitar uma senha que você deverá digitar.
Responder2
Está escondido 'mágica' no initramfs - no pacote zfs-initramfs
para ser exato.
Procure em /usr/share/initramfs-tools/script/zfs e encontre a seguinte linha:
# Open and mount luks keystore for any pools using one
O comportamento é o seguinte:
Depois de importar o pool (por exemplo, rpool
) o volume não criptografado (zvol) nele fica disponível como /dev/zvol/rpool/keystore
.
Este dispositivo zvol ainda está criptografado.
As entradas do crypttab para esses zvols criptografados com luks ( zfs list -t volume
) são criadas dinamicamente durante o tempo de inicialização em /cryptroot/crypttab.
As senhas para essas entradas são então consultadas pelo usuário.
Os dispositivos são então desbloqueados e montados sem criptografia em /run/rpool/keystore
.
Como o próprio rpool é criptografado e seu local de chave aponta para esse local, a chave do rpool pode ser carregada e o processo de inicialização pode continuar.
Provavelmente alguém deveria documentar isso corretamente;)
Quanto à sua pergunta original, você pode tentar ajustar o comportamento com os possíveis pontos de expansão do initramfs para /etc/initramfs-tools/scripts/local-*/
fazer a mesma coisa e montar o zvol você mesmo com a senha do seu dispositivo USB ou fornecer a chave para o rpool de alguma forma diretamente.