Como tornar a suspensão da RAM segura no Ubuntu com criptografia de disco completa (LVM no topo do LUKS)?

20

Estou no Ubuntu 13.04 usando criptografia de disco completo (LVM no topo do LUKS).

Gostaria de incorporar luksSuspendao procedimento de suspensão (e uso posterior luksResume) para que eu possa suspender a RAM sem deixar o material principal na memória e a raiz desbloqueada.

Eu tenho tentado nas últimas 7 horas portar um script para o Arch Linux , até agora sem sucesso: honestamente não tenho ideia do que estou fazendo ...

Alguém pode me ajudar a portar isso (ou criar algo assim do zero)? Ou, pelo menos, alguém pode me indicar uma documentação sobre como conectar coisas aos procedimentos de suspensão e como manter os binários e scripts necessários (como o cryptsetup) disponíveis, mesmo depois que todas as E / S para root foram bloqueadas (por luksSuspend)?

Com relação a como manter os binários e scripts necessários disponíveis para retomar, este outro post do blog (também para Arch) os copiou /boot; Gostaria, no entanto, de usar algo mais nas linhas que Vianney usou no script que mencionei antes, porque essa abordagem parece ser um pouco mais elegante nesse aspecto.

Jonas Malaco
fonte
I gastar mais algumas horas sobre isso ...
Jonas Malaco
Editei os scripts que compõem pm-suspende parecia que eu estava quase lá. No entanto, eu descobri que eu não pode simplesmente suspender o sistema ( echo -n "mem" > /sys/power/state) após o congelamento dos fs raiz ( cryptsetup luksSuspend ...), para que requer algum i / o ainda ...
Jonas Malaco
11
Eu li algumas discussões nas listas Debian (e algumas outras listas que se vincularam ou foram vinculadas a elas) e, até agora, parece que na solução seria necessário algo como um "deinitramfs": o kernel controlaria o controle dos deinitramfs antes de realmente suspender o sistema, para que esse tmpfs possa executar as ações finais de limpeza (como limpar a chave de criptografia do rootfs).
Jonas Malaco 23/09
Eu realmente gostaria de ver essa pergunta respondida também.
BenAlabaster

Respostas:

3

Eu me deparei com o mesmo problema, então tentei portar o mesmo script, que você pode ver aqui . Ele não toca em nenhum armazenamento não volátil depois luksSuspend, então funciona mesmo com criptografia de disco completo real com uma inicialização / criptografada. No entanto, você precisará ter cuidado - pode não funcionar como o esperado ocasionalmente!

O script portado faz o seguinte:

  • Crie uma montagem ramfs em algum lugar
  • Extraia o conteúdo do initramfs lá (incluindo o script de suspensão do initramfs)
  • BIND montar diretórios relevantes (por exemplo /sys, /proc, /dev, /run) para os ramfs montar
  • Interrompa qualquer serviço que possa interferir (systemd-udevd, systemd-journald)
  • Remonte o sistema de arquivos raiz (ext4 ou btrfs) com nobarrier para que o Linux não travar ao tentar entrar no S3, depois sincronize
  • Chroot na montagem initramfs, que sincroniza novamente, é executado luksSuspende coloca o computador em suspensão
  • Após ativar, luksResumeremonte os sistemas de arquivos, reinicie os serviços, desmonte as montagens de ligação na montagem initramfs
  • Por fim, desmonte a montagem initramfs para liberar a RAM usada para os arquivos initramfs

Ainda tenho que fazer testes extensivos no meu script, mas parece funcionar de maneira confiável para mim. Se você usar outro sistema de arquivos (por exemplo, não ext4 ou btrfs), poderá ter problemas com barreira, portanto precisará modificar o script também.

De qualquer forma, é bom testar e verificar se os scripts funcionam primeiro. Se houver travamentos ao tentar colocar o Linux no S3 (ou seja, em echo mem > /sys/power/state), você poderá recuperar:

  • Antes de suspender, abra um terminal tty ou outro (que estará acessível, de modo ideal, um tty)
  • Carregue o conjunto de criptografia e bibliotecas relevantes na RAM: sudo cryptsetup luksResume anything_here
  • Suspender usando o script
  • Se ele travar após o chroot (por exemplo, depois de starting version xxxser exibido no novo vt), mude para o tty que você abriu anteriormente e executesudo cryptsetup luksResume your_luks_device_name_here
  • Se isso travar também, abra outra vt e faça o chroot em /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Tente executar luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Seu computador deve então suspender. Você pode ativá-lo, matar os scripts se eles ainda estiverem em execução, desmontar as montagens de ligação /run/initramfse remontar seu sistema de arquivos raiz com barreira, se aplicável.
Zhongfu
fonte
1

Não tenho experiência com essa configuração, mas muitas pessoas afirmam ter sucesso nisso. Aqui estão alguns deles.

dm-crypt com LUKS - Criptografia a partição swap
Tutorial: Completly criptografado disco rígido incluindo a suspender a partição de disco com Ubuntu 6.10 Edgy Eft
ubuntu-de disco completo de criptografia-LVM-luks

No entanto, nenhum deles usa luksSuspend (que pode ser o motivo pelo qual eles funcionam).

harrymc
fonte
Obrigado pelos links ... Estou usando uma configuração semelhante ao último link (gerado automaticamente pelo instalador 13.04).
Jonas Malaco
No luksSuspend até agora, é necessário desligar para limpar as chaves da memória ... No entanto, obrigado pelos links! Talvez, ao entender como configurar isso manualmente, eu possa obter algumas dicas sobre como usar o luksSuspend para suspender o ram.
Jonas Malaco
11
luksSuspend parece extremamente difícil de usar. Como congela toda a E / S, é necessário um script de suspensão muito acrobático. Eu encontrei apenas uma história de sucesso em alemão que pode ser (mal) traduzida para o inglês . Tente usá-lo como modelo.
harrymc
2
Você também pode precisar usar um disco ram e um conjunto de criptografia vinculado estaticamente.
harrymc
1

Passei algum tempo obtendo isso totalmente funcional no Ubuntu 15.10. Se você estiver tentando fazer isso funcionar no ext2, ext3 ou ext4, será necessário atualizar o / etc / fstab para montar o volume com a opção 'nobarrier'. Caso contrário, sugiro usar o BTRFS.

Depois que seu sistema de arquivos estiver preparado, use o script aqui: https://github.com/Microcentillion/ubuntu-lukssuspend

user569427
fonte