Qual é a maneira correta de desbloquear um sistema de arquivos raiz, abrangendo dois dispositivos LUKS, inserindo apenas a senha uma vez, usando o systemd?

5

Eu tenho tido muitos problemas para obter um sistema de arquivos raiz multi-disco criptografado para inicializar de forma confiável sob systemd no Debian Jessie, tendo apenas que digitar a senha uma vez. Anteriormente, eu lidei com isso no Debian usando o decrypt_derived keyscript em / etc / crypttab para cada dispositivo, exceto o primeiro, e isso funcionou bem.

No entanto, isso não funciona bem quando o systemd é introduzido. systemd-cryptsetup-generator não manipula keycripts, e ao tentar encontrar mais informações sobre como resolver isso, eu só encontrei referências vagas para alguns personalizado agente de senha em um e-mail de um dos desenvolvedores do systemd que apenas dá o conselho inútil de que é "fácil escrever agentes adicionais. O algoritmo básico a ser seguido se parece com este" e então uma lista de 13 passos a serem seguidos. Claramente não é para um usuário final.

Eu, o Debian, tenho que trabalhar até certo ponto jogando com algumas opções de kernel que dizem ao systemd para ignorar /etc/crypttab durante o boot, ou ignorá-lo completamente. O update-initramfs do Debian copiará o keycript para o initramfs e desbloqueará os dispositivos antes que o systemd assuma, mas descobri que isso leva a problemas mais tarde porque o systemd agora não possui nenhum arquivo unitário para os dispositivos descriptografados, portanto montagens que dependem deles parece travar ou ficar atrasado. Um lugar onde isso é quebrado ao tentar montar subvolumes btrfs; eles são montados a partir do mesmo dispositivo físico que o root, mas o systemd não sabe que os dispositivos já estão desbloqueados e pára na inicialização.

TL; DR - minha pergunta atual:

Qual é a maneira do sistema de lidar com um sistema de arquivos raiz criptografado que abrange vários dispositivos (seja um sistema btrfs, espelho LVM, etc), onde você só precisa digitar a senha uma vez? Eu dificilmente considero isso como um caso excepcionalmente incomum, então aqui está a esperança de que exista um método para fazer isso.

Algumas possíveis soluções vêm à mente:

  • Minúscula partição criptografada contendo um arquivo-chave, que é desbloqueado antes do root. Os dispositivos raiz referem-se a este arquivo de chaves. Como eu diria isso ao systemd?
  • Algum tipo de agente de senha de armazenamento em cache sendo executado no initramfs, que lembra a senha e a entrega a todos os dispositivos que precisam dela na inicialização.
  • Alguém já escreveu um agente do systemd emulando decrypt_derived. Como eu integraria isso no meu procedimento de inicialização?

Eu executo o Debian exclusivamente, mas depois de ter tentado por dias encontrar uma solução para o meu problema, sinto que este talvez seja um problema mais amplo do sistema.

    
por pipe 03.12.2015 / 04:29

1 resposta

4

Este é um problema bem conhecido, atualmente sem solução.

No Debian (e outros sistemas), o systemd não consegue montar um array BTRFS criptografado, por causa dos processos paralelos e vários testes. Todos os volumes de uma matriz BTRFS devem estar presentes para serem montados (corretamente), mas como todos os volumes da matriz BTRFS têm o mesmo UUID (por design), o systemd tenta montar o primeiro volume que ele abre sem esperar por os outros (o que exporia o mesmo UUID, confundindo ainda mais o sistema).

Atualmente, a única maneira de usar volumes BTRFS criptografados no Debian é não usar systemd (pacotes sysvinit-core , systemd-shim , etc.). Não existe uma "forma de sistema" possível.

    
por 23.12.2015 / 22:18