Como importo automaticamente um pool ZFS criptografado não raiz na inicialização?

6

Estou executando uma versão atualizada do Arch Linux com o kernel padrão, versão 4.9.6 e ZoL versão 0.7.0, e quero importar um conjunto não-raiz criptografado na inicialização. A piscina é um espelho de ataque 1.

Os contêineres criptografados foram feitos por meio de:

cryptsetup -y -v luksFormat /dev/nvme0n1p3

e

cryptsetup -y -v luksFormat /dev/nvme1n1p3

Eu usei a mesma senha para cada um.

Eu posso abrir manualmente os containers e importar o pool via:

cryptsetup open /dev/nvme0n1p3 enc0  
cryptsetup open /dev/nvme1n1p3 enc1   
zpool import -d /dev/mapper zeb

Os comandos cryptosetup me solicitam e aceitam minha senha.

Meu arquivo mkinitcpio contém os ganchos systemd , zfs e sd-encrypt . Ele também contém os módulos dm_mod , dm_crypt , aes_x86_64 e raid1 . Estes são um pouco de um tiro no escuro com base em bits e peças que eu encontrei online.

Estou usando o systemd-boot, mas parece que a chave está em configurar corretamente o mkinitcpio. Minha partição de inicialização não está criptografada.

Mais uma vez, meu único objetivo aqui é automaticamente (com a solicitação de frase secreta) importar meu pool ZFS criptografado na inicialização. Não tenho nenhum problema em fazer isso com pools não criptografados.

    
por airhuff 04.02.2017 / 07:12

1 resposta

2

Eu não tenho 50 reputação para comentar, então vou postar minhas perguntas aqui. Seu rootfs não está criptografado? Então, quando você inicializa, você não recebe nenhum aviso de cryptsetup? Se você não receber prompts de senhas, sugiro que você descompacte o initramfs e modifique o arquivo init e adicione as seguintes linhas, em algum lugar, após a montagem do rootfs. cryptsetup open / dev / nvme0n1p3 enc0 & & cryptsetup open / dev / nvme1n1p3 enc1 & & zpool import -d / dev / mapeador zeb

Algum tempo atrás, eu precisava adicionar o desbloqueio ssh remoto de ROOTFS criptografados pelo LUKS com o ZFS em um servidor remoto. Não tenho como modificar o arquivo init e adicionar o dropbear a ele, iniciá-lo e modificar o comando cryptsetup para aceitar a senha do fifo. Eu fiz um script bash para isso, então quando eu atualizo o initramfs, este script bash descompacta o initramfs, coloca minhas alterações e o empacota de volta. Mas eu estou usando o gentoo e é um bonito genkernel. O Genkernel inclui ganchos para ZFS e cryptsetup, se você especificá-lo. Eu não sei como é no arch linux, talvez você também tenha uma opção para construir o kernel com o genkernel / dracut, assim você pode facilmente incluir cryptsetup e zfs hooks no initramfs, se ele ainda não estiver incluído. De qualquer forma, é fácil de fazer modificando o arquivo init, experimente e poste seus resultados aqui. seu initramfs pode ser compactado usando métodos diferentes, então descubra como descompactá-lo no archlinux. Do meu lado, eu modifiquei o genkernel para gerá-lo como cpio, e use os comandos do cpio para descompactar / empacotar de volta.

UPDATE : Você precisa editar o seu mkinitcpio.conf e adicionar 2 ganchos "criptografar o zfs" antes de "sistemas de arquivos" no HOOKS Em seguida, você precisa definir seus dispositivos luks, necessários para desbloquear /etc/crypttab.initramfs # (google crypttab) Este arquivo será incluído na próxima geração do initramfs, então agora estamos desbloqueando-os pelo menos. Talvez o ZFS faça autoimport na próxima reinicialização, mas se não, faça o seguinte:

crie o arquivo / usr / lib / initcpio / install / zfsmount

#!/bin/bash

build() {
    add_runscript
}

crie o arquivo / usr / lib / initcpio / hooks / zfsmount

#!/usr/bin/ash

run_hook() {
zpool import mypool
}

e no mkinitcpio.conf adicione "zfsmount" no HOOKS em algum lugar no final, antes ou depois de "sistemas de arquivos"

E, claro, regenere seu initramfs com mkinitcpio

Refs: link

link

    
por 15.02.2017 / 10:25