Como criptografar um fs raiz ao vivo remotamente e desbloqueá-lo via ssh

2

Eu tenho um sistema Linux Arch em execução em um VPS. O rootfs é instalado em uma partição LVM. Eu gostaria de sobrepor um container criptografado nesta partição, então reinstalar o rootfs nele e habilitar o ssh unlock no boot via ssh. Tenho o prazer de descartar todo o conteúdo dos rootfs existentes e criar um novo a partir do zero.

Estou procedendo da seguinte forma:

  1. crie um novo rootfs temporário em / tmp / newroot (eu uso a imagem boostrappig do Linux Arch no Wiki do Arch )
  2. chroot e configure o pacman, instale algumas coisas defina authorized_keys, ative mas não inicie sshd
  3. sair de volta para a raiz original
  4. alterne permanentemente para a nova raiz: seguindo as recomendações em esse ótimo post , eu corro o código abaixo.
  5. Neste ponto, gostaria de reiniciar o sshd e todos os outros serviços ainda pendentes na raiz antiga, que está na partição lvm
  6. crie uma partição criptografada na partição lvm
  7. instale o arch Linux nele e modifique intrafms apropriadamente

Os passos 6 e 7 estão bem documentados (por exemplo, aqui ).

Aqui estão os detalhes do passo 4, que funciona bem:

# we start after step 2, so that /tmp/newroot contains a minimal temporary root fs 
# with network, sshd and pacman, and the command prompt is from the original root

# move the new root fs to a newly create /tmproot, as per the referenced post
# (perhaps this is redundant, I could have used newroot directly, but it should not harm)
mkdir /tmp/tmproot
mount -t tmpfs none /tmp/tmproot
mv /tmp/newroot/* /tmp/tmproot

# switch to new root
mount -a
mount --make-rprivate / # necessary for pivot_root to work
pivot_root /tmp/tmproot /tmp/tmproot/oldroot

# move some directories to newroot
for i in dev proc sys run; do mount --move /oldroot/$i /$i; done

Estou preso à etapa 5. Usando fuser -vm /oldroot , vejo muitos processos ainda pendentes na antiga partição raiz. Se eu tentar reiniciá-los a partir do newroot usando systemctl , recebo um erro:

# systemctl restart sshd
Failed to restart sshd service: Failed to activate service 'org.freedesktop.systemd1': timed out

Eu posso matá-los manualmente, mas depois fico com apenas o processo init systemd , e parece não haver maneira de matar isso. systemctl daemon-reexec não funciona.

Talvez eu tenha esquecido de configurar algo no meu sistema de arquivos newroot ? Talvez eu deva usar switch_root em vez de pivot_root

Alguma sugestão? Obrigado

    
por Fabio 09.03.2016 / 06:36

1 resposta

1

Dê uma olhada no link . Você pode trocar o gancho mkninitcpio encrypt por encryptssh e adicionar algumas coisas à sua linha de inicialização do kernel. Estou usando o gancho dropbear e funciona muito bem.

    
por 12.05.2016 / 17:26