Diferença entre cryptopts e crypttab

1

Estou configurando um root fs criptografado, o que eu fiz antes, mas desta vez estou usando um arquivo de chaves criptografado por PGP com uma senha simétrica para me familiarizar com o processo.

Existem dois lugares onde a configuração de raízes criptografadas parece ocorrer, nas opções de inicialização do kernel em cryptopts e em /etc/crypttab , que parece ser usado por mkinitramfs para assar certas coisas no initramfs.

É meio complicado atualizar as coisas nos dois lugares; afinal, qual é o sentido de tê-lo em dois lugares, se o suficiente? Eu vejo o valor de ter coisas em /etc/crypttab , como o initramfs pode ser gerado de forma diferente com ganchos e scripts diferentes se um volume LUKS estiver presente.

Usando um exemplo anterior emendado para essa pergunta, aqui está meu crypttab:

picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg

Presumivelmente, isso diz ao initramfs que /dev/mmcblk0p2 deve ser descriptografado para usar o nome picrypt , especificando que queremos usar luks e passar o arquivo /boot/diskkey.gpg para o script /lib/cryptsetup/scripts/decrypt_gnupg para gerar um frase secreta para o volume.

Em seguida, aqui estão os meus cryptopts da minha linha init do kernel:

cryptopts=target=picrypt,source=/dev/mmcblk0p2,lvm=pi

Mais uma vez, estamos re-especificando que /dev/mmcblk0p2 cria picrypt e, nesse caso, também estamos informando que há um volume LVM chamado pi , pelo qual ele deve aguardar antes de tentar montar o sistema de arquivos raiz especificado pelo parâmetro root=/dev/mapper/pi-root kernel.

Esta configuração não está funcionando, por incrível que pareça, já que parece ignorar os principais parâmetros do script de chave e do script do crypttab e não solicitar a frase-chave de chave simétrica do GPG, e sim diretamente para uma chave. Vou emendá-lo para incluir keyscript e keyfile em cryptopts , mas por que devo fazer isso?

Existe uma maneira de incluir tudo isso (ou pelo menos a maioria) em /etc/crypttab e não duplicar tudo na linha init do kernel? É meio ridículo ter que mudar tudo duas vezes. Essas diferentes fontes simplesmente fornecem funções diferentes, crypttab na forma de hooks e cryptopts na forma de parâmetros reais para o cryptsetup?

    
por Naftuli Kay 01.06.2015 / 07:35

1 resposta

1

Uau. Isso me levou quase dois dias para descobrir como tudo isso funciona no Debian / stretch (embora eu tenha feito isso antes). Eu tropecei na sua pergunta e mantive-a aberta para responder isso, caso eu encontre a resposta.

E sim, há uma crypttab(5) opção initramfs , que faz exatamente o que você está pedindo:

initramfs

The initramfs hook processes the root device, any resume devices and any devices with the “initramfs” option set. These devices are processed within the initramfs stage of boot. As an example, that allows the use of remote unlocking using dropbear.

(Acredite ou não, achei essa opção apenas por acaso, lendo um TODO -File na fonte cryptsetup.)

Portanto, a sua linha crypttab deve ser assim:

picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg,initramfs

Mais uma coisa: os módulos cryptsetup são adicionados somente à imagem initramfs "quando há um dispositivo que precisa ser desbloqueado no estágio initramfs (como dispositivos raiz ou currículo)" (Consulte: conf-hook ). Mas isso atualmente só funciona (de forma confiável) se o dispositivo raiz não estiver em um LVM. Para forçar os módulos cryptsetup à imagem initramfs, tive que definir CRYPTSETUP=y em /etc/cryptsetup-initramfs/conf-hook .

Em qualquer caso, você precisa executar update-initramfs -k all -u depois de alterar qualquer um dos arquivos mencionados.

    
por 03.06.2018 / 23:35