Como faço para descriptografar automaticamente um sistema de arquivos criptografado na próxima reinicialização?

4

Meta

Estou procurando uma maneira não interativa de descriptografar uma partição de arquivo raiz e uma partição de troca criptografada com o LUKS na próxima vez em que o sistema for reinicializado. Além disso, eu preciso de uma maneira de desfazê-lo após a reinicialização, para que, após mais uma reinicialização, seja necessária a senha novamente (ou até mesmo uma nova senha).

O sistema usa o LVM.

Eu não quero ter que digitar a senha no sistema, ou usar um sistema diferente para desbloqueá-la, ela tem que se desbloquear uma vez.

Eu tenho a senha com a qual ela está criptografada e estarei disposta a salvá-la em texto não criptografado no disco rígido. Não estou preocupado com a segurança nesta etapa.

Antecedentes

Eu tenho um fluxo para implantar o Ubuntu que é baseado em uma instalação de servidor Ubuntu com um arquivo preseed e kickstart personalizado, o kickstart instala um serviço que é executado após a primeira reinicialização (e apenas a primeira reinicialização) e reinicia novamente. Eu estou tentando implementar a criptografia de disco LUKS neste fluxo, mas eu preciso que ele permaneça não interativo, então ele deve ser capaz de reiniciar pela primeira vez sem uma senha.

A senha definida durante a instalação é temporária e será alterada pelo serviço que é executado após a primeira reinicialização, para que a primeira senha possa ser armazenada em texto não criptografado.

Coisas que examinei antes de postar esta pergunta

Eu fiz o meu melhor do Google para tentar descobrir este, e mais do que eu acho apontar para uma solução que desloca o arquivo initramfs.

Encontrei vários recursos que explicam como usar isso para permitir o desbloqueio remoto do sistema, mas preciso fazê-lo sem interação. Aqui está um desses recursos: link

O mais próximo de uma solução que eu acho ter encontrado é esse recurso que supostamente é uma maneira de realizar o que eu quero para uma solução VPS, mas é apenas um monte de comandos sem explicação, e eu não saiba como adaptá-lo: link

Também encontrei esse recurso para o link , e tentei adicionar o recurso parâmetros do kernel, mas eu também não tive sorte com isso. Não sei se é porque o LUKS não suporta estes parâmetros do kernel.

    
por Tobias 15.01.2018 / 14:03

1 resposta

4

A solução parece ser bastante simples, e é uma espécie de descrição em Como configurar o LVM & amp; LUKS para autodecrypt partição?

Veja como eu consegui fazer isso

Minha partição / boot é / dev / sda1

Meu volume LVM que eu quero descriptografar é / dev / sda3

Eu era o root, mas se você não está anexando o sudo a todos os comandos.

Comece fazendo um arquivo-chave com uma senha (eu gero um pseudo-aleatório)

dd if=/dev/urandom of=/boot/keyfile bs=1024 count=4

Em seguida, defina a permissão de leitura para raiz e nada para mais ninguém

chmod 0400 /boot/keyfile

Em seguida, adicione o arquivo de chaves como uma chave de desbloqueio

cryptsetup -v luksAddKey /dev/sda3 /boot/keyfile

(Você será solicitado a digitar a senha de criptografia)

Encontre o uuid da partição / boot com (este não requer que você seja root)

ls -l /dev/disk/by-uuid/

Aqui está um exemplo de como é a aparência (não é a saída real quando eu peguei isso de outra máquina)

test@test:~$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jan 15 03:36 025c66a2-c683-42c5-b17c-322c2188fe3f -> ../../sda2
lrwxrwxrwx 1 root root 10 Jan 15 03:36 9e7a7336-3b81-4bbe-9f1a-d43415df1ccb -> ../../sda1

Em seguida, edite o arquivo / etc / crypttab com o seu editor favorito

nano /etc/crypttab

O conteúdo será parecido com algo (mais uma vez, isso é de outra máquina)

sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f none luks,discard

O que você quer fazer é querer substituir none por / dev / disk / by-uuid / [o uuid da partição / boot] e você deseja substituir descartar com keyscript = / lib / cryptsetup / scripts / passdev

O resultado deve ser parecido com isto

sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f /dev/disk/by-uuid/9e7a7336-3b81-4bbe-9f1a-d43415df1ccb luks,keyscript=/lib/cryptsetup/scripts/passdev

Salve o arquivo e continue atualizando o initramfs

update-initramfs -u

É isso aí, agora você pode reiniciar.

reboot

Para removê-lo novamente (como eu queria)

Primeiro, confirmo que existem apenas duas chaves para o sistema (o original e o novo arquivo-chave)

cryptsetup luksDump /dev/sda3 | grep BLED

Isso gerará uma saída semelhante a esta

Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Para excluir a chave no key slot 1 (o arquivo-chave)

cryptsetup luksKillSlot /dev/sda3 1

Você será solicitado a digitar a senha de criptografia (a original, não a senha do arquivo-chave)

Em seguida, exclua o arquivo de chaves real

rm /boot/keyfile

Atualize o initramfs novamente

update-initramfs -u

Agora, quando você reiniciar, será solicitada uma senha novamente. Você está feito.

reboot
    
por Tobias 19.01.2018 / 13:09