Eu quero vários prompts para descriptografar vários discos rígidos que contêm sistema de arquivos raiz

1

Estou executando um sistema Ubuntu 16.04 com a seguinte configuração de disco rígido:

  1. 1 disco rígido que eu chamarei de / dev / sda. / dev / sda possui 3 partições usadas para as seguintes finalidades:
    1. / dev / sda1 é usado para a partição do sistema EFI.
    2. / dev / sda2 é usado para a partição / boot.
    3. / dev / sda3 é usado para armazenar um volume criptografado, criptografado com o LUKS.
  2. Vou chamar o dispositivo / dev / sda3 descriptografado / dev / sda3_crypt. Dentro de / dev / sda3_crypt está uma configuração de LVM. A configuração do LVM consiste em um grupo de volumes chamado "alexmini". O grupo de volumes alexmini contém os seguintes volumes lógicos e sistemas de arquivos:
    1. Um volume lógico / dev / mapper / alexmini-vg - contendo um sistema de arquivos btrfs.
    2. Um volume lógico / dev / mapper / alexmini-vg - swap usado para espaço de troca.
  3. Eu tenho um segundo disco rígido chamado / dev / sdb. / dev / sdb contém uma partição chamada / dev / sdb1. / dev / sdb1 também é um dispositivo criptografado usando LUKS. Vou chamar o dispositivo descriptografado / dev / sdb1_crypt. / dev / sdb1_crypt contém um sistema de arquivos btrfs. / dev / sdb1_crypt é adicionado ao / dev / mapper / alexmini-vg - conjunto de volumes root btrfs.
  4. O sistema de arquivos btrfs também é meu sistema de arquivos raiz.

Quando executo o update-initramfs a partir da configuração especificada acima, eu esperava que os scripts de inicialização do cryptsetup initramfs descriptografassem o / dev / sda3 e / dev / sdb1, mas os scripts apenas descriptografam o / dev / sda3, o que só leva parte do pool de volumes btrfs a estar disponível. Acabo no modo "recuperação" do initramfs.

Como eu configuro o update-initramfs para que os scripts de inicialização cryptsetup me avisem duas vezes para descriptografar meus discos rígidos, uma vez para / dev / sda3 e uma vez para / dev / sdb1?

    
por Alex W 13.09.2017 / 18:32

1 resposta

2

Ok, eu percebi e consegui trabalhar. Passei algum tempo estudando os scripts initremfs cryptsetup em /usr/share/initramfs-tools/hooks . Este diretório contém scripts que são executados sempre que update-initramfs é executado. Em particular, se cryptsetup estiver instalado, haverá um script cryptroot neste diretório, que é o que estudei para encontrar pistas sobre como os discos são descriptografados na inicialização.

Quando o initramfs é carregado na inicialização, há um script que descriptografa as partições do disco rígido listadas em um arquivo chamado conf / conf.d / cryptroot. Este arquivo fica dentro do arquivo initramfs, que você pode explorar descompactando o arquivo com os seguintes comandos:

$ sudo cp /boot/initrd.img-4.4.0-93-generic ~
$ cd
$ # use sudo chown to change the ownership of the initramfs file to the current user
$ mv initrd.img-4.4.0-93-generic initrd.img-4.4.0-93-generic.gz
$ gunzip initrd.img-4.4.0-93-generic.gz
$ mkdir -p tmp && cd tmp
$ cpio -i < ../initrd.img-4.4.0-93-generic

Normalmente, conf/conf.d/cryptroot listará apenas a partição que contém seu sistema de arquivos raiz para descriptografia. Se o seu sistema de arquivos raiz abranger várias partições criptografadas, como um sistema de arquivos btrfs ou um sistema de arquivos instalado em um volume lógico LVM, você não conseguirá montar corretamente o sistema de arquivos na inicialização porque apenas uma de suas partições criptografadas será descriptografada. O que precisamos é que all as partições de apoio sejam decifradas antes da montagem. As partições criptografadas que são listadas em conf/conf.d/cryptroot são determinadas quando você cria o arquivo initramfs.

Quando você cria a imagem initramfs, o script cryptroot varre quais partições contêm seu sistema de arquivos raiz. Para sistemas de arquivos btrfs, o cryptroot executará comandos btrfs para consultar as partições que suportam seu sistema de arquivos. No entanto, nem todas as partições retornadas da consulta serão adicionadas a conf / conf.d / cryptroot. Apenas as partições consultadas que também estão listadas em / etc / crypttab serão adicionadas a conf / conf.d / cryptroot. Minha solução foi adicionar uma entrada para a segunda partição criptografada que estava fazendo backup do meu sistema de arquivos raiz / etc / crypttab.

Meu arquivo / etc / crypttab resultante se parece com o seguinte:

sda3_crypt UUID=<my UUID for /dev/sda3> none luks,discard
sdb1_crypt UUID=<my UUID for /dev/sdb1> none luks

Em seguida, você deseja executar update-initramfs para gerar o novo initramfs, que conterá uma entrada para sda3_crypt e sdb1_crypt em conf / conf.d / cryptroot. Isso fará com que o script de descriptografia solicite sua senha duas vezes na inicialização: uma vez para sda3_crypt e outra para sdb1_crypt.

TL; DR: Assegure-se de que todas as suas partições que suportam seu sistema de arquivos raiz contenham uma entrada em /etc/crypttab . Execute update-initramfs após atualizar /etc/crypttab .

Nota: Sempre que o update-grub é executado para sistemas de arquivos btrfs abrangendo vários dispositivos, ele não gera a linha de comando do kernel corretamente. Há uma solução rápida no link

    
por 14.09.2017 / 08:37