Criptografia de disco completo do Ubuntu com criptografado / boot

9

Estou tentando configurar um disco criptografado completo com uma partição /boot separada e estou tendo alguns problemas.

Vou escrever o procedimento que tenho seguido em uma sessão de DVD ao vivo do Ubuntu 15.04.

  • Preencha o disco com 'dados aleatórios'

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • Crie as partições (usando o gparted)

    1. Criar tabela de partições - gpt 2
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 troca de linux 4GB #swap
      • / dev / sda3 ext4 15 GB #root
      • / dev / sda4 ext4 FREESPACE #home
  • Criptografar volumes

    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda1
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda2
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda3
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 5000 /dev/sda4
    
  • Criptovolume aberto

    cryptsetup luksOpen /dev/sda1 boot
    cryptsetup luksOpen /dev/sda2 swap
    cryptsetup luksOpen /dev/sda3 root
    cryptsetup luksOpen /dev/sda4 home
    
  • Formatar

    mkfs.ext2 /dev/mapper/boot
    mkswap /dev/mapper/swap
    mkfs.ext4 /dev/mapper/root
    mkfs.ext2 /dev/mapper/home
    
  • Instale (usando o Ubiquity)

    • gerenciador de inicialização em / dev / sda
    • / dev / sda1 - use como ext2 - mount point / boot
    • / dev / sda2 - use como ext2 - mount point / boot
    • / dev / sda3 - use como ext2 - ponto de montagem / boot
    • / dev / sda4 - use como ext2 - ponto de montagem / boot

    No final, o instalador avisa que a instalação do grub falhou (porque o volume de inicialização está criptografado), então escolha 'continue without bootloader'.

  • Limpar o volume de inicialização

    mkfs.ext2 /dev/mapper/boot
    
  • Montar volume

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Atualize fstab e crypttab

    sudo blkid
    
    [/dev/sr0: UUID="2015-10-21-16-17-40-00" LABEL="Ubuntu 15.10 amd64"
               TYPE="iso9660" PTUUID="429817b4" PTTYPE="dos"
    /dev/sda1: UUID="...#1" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda2: UUID="...#2" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda3: UUID="...#3" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda4: UUID="...#4" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/mapper/boot: UUID="..." TYPE="ext2"
    /dev/mapper/swap: UUID="..." TYPE="swap"
    /dev/mapper/root: UUID="..." TYPE="ext4"
    /dev/mapper/home: UUID="..." TYPE="ext4"]
    
  • fstab

    #<file system>   <mount point>   <type>   <options>           <dump>   <pass>
    UUID=#1          /boot           ext2     defaults            0        2
    UUID=#2          none            swap     sw                  0        0
    UUID=#3          /               ext4     errors=remount-ro   0        1
    UUID=#4          /home           ext4     defaults            0        2
    
  • crypttab

    boot   UUID=#1   luks,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool, time=3000
    swap   UUID=#2   luks,swap,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool,time=3000
    root   UUID=#3   luks,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool,time=3000
    home   UUID=#4    luks,cipher=twofish-xts-plain64,size=512,
                      hash=whirlpool,time=5000
    
  • Atualizar a imagem do initramfs

    cd /mnt
    sudo chroot root
    mount -t proc proc /proc
    mount -t sysfs sys /sys
    mount -t devpts devpts /dev/pts
    update-initramfs -u                      #ok
    
  • Configurar o carregador de inicialização ( /etc/default/grub )

    GRUB_ENABLE_CRYPTODISK=y
    GRUB_PRELOAD_MODULES="luks cryptodisk"
    GRUB_CMDLINE_LINUX="cryptdevice=UUID#3:root root=/dev/mapper/root resume=/dev/mapper/swap 
                        crypto=whirlpool:twofish-xts-plain64:512:0:"
    
  • criar arquivo de configuração

    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of '/dev/mapper/root'.]
    
  • tente fora

    $ exit
    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of '/cow'.]
    

Eu cometi algum erro antes disso? Como posso continuar a configurar e instalar o grub corretamente?

    
por Nicholas Roveda 04.02.2016 / 00:19

1 resposta

9

Você cometeu alguns erros, mas o principal problema está na onipresença e no grub. Basicamente, quando você define / para ser uma partição criptografada e não cria uma partição separada para /boot , o grub apresenta uma mensagem de erro como:

  

Eu sei que /boot está criptografado. Você precisa definir GRUB_ENABLE_CRYPTODISK=y em /etc/default/grub . Eu não farei isso por você, então vou falhar e sua instalação irá parar.

Uma visão geral do processo:

  • Usamos o modo EFI.
  • Instalamos em uma partição /boot não criptografada e em um btrfs / criptografado usando o instalador padrão.
  • Após o término do instalador, nós chroot , fazemos algumas alterações importantes na configuração e reinstalamos o grub na Partição do sistema EFI e recriamos o initrd.

As etapas detalhadas:

  • Inicialize a partir do disco de instalação do Ubuntu 16.04 (testado com o Xubuntu).
  • Conecte-se à Internet e execute sudo apt update && sudo apt upgrade para atualizar os componentes do instalador
  • Use fdisk, gparted ou outra ferramenta para criar 3 partições:
    • Uma tabela de partições do GPT
    • Uma partição de 200MB que usaremos para a partição do sistema EFI
    • Uma partição de vários gigabytes que eventualmente usaremos como nossa partição de permuta criptografada, mas que funcionará como nossa /boot não criptografada temporária
    • Uma partição criptografada que usa o restante do espaço
  • Prepare a partição criptografada

    sudo cryptsetup luksFormat /dev/sda3
    sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
    sudo mkfs.btrfs /dev/mapper/sda3_crypt
    
  • Instale o Ubuntu

    • Escolha "Outra coisa" quando perguntado sobre o tipo de instalação.
    • Configure /dev/sda1 como EFI System Partition
    • Configure /dev/sda2 como ext2, formatado, com o ponto de montagem de /boot
    • Configure /dev/mapper/sda3_crypt como btrfs com ponto de montagem de /
    • Continue com a instalação.
    • Depois de terminar, escolha ficar no sistema ao vivo (sem reinicialização).
  • Copie o conteúdo de /boot e faça um chroot

    sudo mount -o subvol=@ /dev/mapper/sda3_crypt /target
    sudo mount /dev/sda2 /mnt
    # (Watch those trailing slashes! rsync is very sensitive to them.)
    sudo rsync -aXAH /mnt/ /target/boot/
    sudo mount /dev/sda1 /target/boot/efi
    sudo mount --bind /dev /target/dev
    sudo mount --bind /proc /target/proc
    sudo mount --bind /sys /target/sys
    sudo chroot /target
    
  • (Tudo está acontecendo agora como chroot dentro de seu novo sistema.)

  • Adicione uma linha a /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • Adicione uma linha a /etc/crypttab . Você precisará primeiro executar sudo blkid para encontrar o UUID de /dev/sda3 (NÃO /dev/mapper/sda3_crypt ).

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Edite /etc/fstab e exclua a linha para /boot . As outras entradas estão corretas.

  • Instale o grub na partição do sistema EFI, gere um novo grub.cfg e prepare o initrd.

    sudo grub-install --target=x86_64-efi --efi-directory /boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck
    sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub/grub.cfg
    sudo update-initramfs -c -k all
    
  • (verificação dupla opcional) Verifique novamente se o /boot/efi/EFI/ubuntu/grub/grub.cfg contém linhas que incluem insmod luks , cryptomount -u <UUID> , o entradas de inicialização corretas, etc. E verifique novamente se o seu initrd contém o binário cryptsetup . Se essas coisas estão faltando, é porque o grub-mkconfig e / ou update-initrd não conseguiram descobrir como os volumes que você montou ou especificou no fstab se relacionam com o volume criptografado no crypttab. (Há muita autoconfiguração mágica que eles fazem.) Isso pode acontecer se você divergir deste guia, por exemplo, usando o ZFS ou tentando particionar o sda3_crypt.

  • (Se estiver usando o ZFS em vez do btrfs) o grub-mkconfig e o update-initrd não reconhecerão o ZFS. A solução alternativa envolve (durante o chroot, antes do grub-mkconfig / update-initrd) editar /usr/sbin/grub-mkconfig para adicionar || true à linha 139 (que começa com GRUB_DEVICE= ), adicionando GRUB_DEVICE="/dev/mapper/sda3_crypt" a /etc/default/grub , criando o arquivo /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetup com o conteúdo export CRYPTSETUP=y e o arquivo /etc/initramfs-tools/conf.d/cryptroot com o conteúdo target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard . Tudo isso é uma adição às etapas que você executaria se não estivesse criptografando a partição do ZFS (como instalar os utilitários zfs userspace no sistema ativo e durante o chroot e excluir a linha que monta / no fstab).

  • Saia do chroot e reinicie em seu novo sistema

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • Você deve ver o grub pedindo sua senha. Então você vai ter o menu de inicialização. Então, depois de escolher o Ubuntu, você será perguntado pela sua senha novamente. Então você estará no seu sistema. Leia mais sobre como o Ubuntu usa o BTRFS .

  • TODO : Crie uma troca criptografada (dica: envolve a edição de crypttab, fstab e re-running update-initrd).

  • TODO : Salve sua senha para que você só precise digitá-la uma vez no grub. Isso está detalhado em: ligação

Upgrades

  • Sempre que você instalar um novo kernel, deverá executar o comando grub-mkconfig personalizado.
  • Toda vez que você atualizar o grub, você deve executar o comando grub-install personalizado.

Outras notas

  • É tentador criar um único volume criptografado e particioná-lo para criar a partição de troca (e possivelmente outras), mas isso não funciona. Tanto o grub-mkconfig quanto o update-initrd irão se comportar mal.No entanto, eu não tentei LVM.
  • Pode ser tentador usar um arquivo de swap sobre o btrfs, mas provavelmente é uma má ideia por causa do desempenho.
por Aleksandr Dubinsky 21.07.2016 / 18:55