Criptografia de disco completo do Ubuntu com criptografia / inicialização

15

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

Anotarei o procedimento que tenho seguido em uma sessão do Ubuntu 15.04 Live DVD.

  • Encha o disco com 'dados aleatórios'

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

    1. Criar tabela de partição - gpt 2.
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 linux-swap de 4 GB #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
    
  • Cryptovolume aberto

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

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

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

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

  • Volume de inicialização limpo

    mkfs.ext2 /dev/mapper/boot
    
  • Volume de montagem

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Atualizar 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 imagem 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 gerenciador 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 lá 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?

Nicholas Roveda
fonte
Sinto-me mal por fazer com que você mova seu Q para o site "correto", ninguém ajudou. Eu não fiz esse nível de trabalho no Ubuntu. Mas eu procurei no google por grub+ seu título. Suponho que você encontrou seu procedimento para criptografar em pavelkogan.com/2014/05/23/luks-full-disk-encryption (que é a primeira pesquisa do Google sobre este tópico). se não, talvez isso ajude. Boa pergunta! e boa sorte!
shellter 06/02
Algumas coisas: 1. Você menciona /bootcomo o ponto de montagem de tudo. Espero que seja um erro de digitação. 2. Você não /devmontou enquanto fazia chroot, mas montou devpts. Oo
muru 15/05
Outro erro é que você parece estar usando os mesmos UUIDs no crypttab e no fstab. O fstab deve realmente usar os UUIDs das unidades / dev / mapper /.
Aleksandr Dubinsky
1
confira este guia por um membro da comunidade Ubuntu. Eu usei e funciona muito bem para mim.
precisa saber é

Respostas:

13

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

Eu sei que /bootestá criptografado. Você precisa definir GRUB_ENABLE_CRYPTODISK=yno /etc/default/grub. Não vou fazer isso por você, então vou falhar e sua instalação será interrompida.

Uma visão geral do processo

  • Nós usamos o modo EFI.
  • Instalamos em uma /bootpartição não criptografada e em um btrfs criptografado /usando o instalador padrão.
  • Após a conclusão do instalador chroot, fazemos algumas alterações importantes na configuração, reinstale o grub na partição do sistema EFI e recrie o initrd.

Os passos detalhados

  • 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 upgradepara atualizar os componentes do instalador
  • Use fdisk, gpartedou outra ferramenta para criar 3 partições:
    • Uma tabela de partição GPT
    • Uma partição de 200 MB que usaremos para a partição do sistema EFI
    • Uma partição de vários gigabytes que eventualmente usaremos como nossa partição de swap criptografada, mas que funcionará como nossa temporária não criptografada /boot
    • 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.
    • Configurar /dev/sda1comoEFI System Partition
    • Configure /dev/sda2como ext2, formatado, com ponto de montagem de/boot
    • Configure /dev/mapper/sda3_cryptcomo btrfs com ponto de montagem de/
    • Continue com a instalação.
    • Após a conclusão, escolha permanecer no sistema ativo (sem reinicialização).
  • Copie o conteúdo /boote faça umchroot

    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
    
  • (Agora tudo está acontecendo como chrootdentro do seu novo sistema.)

  • Adicionar linha a /etc/default/grub

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

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Edite /etc/fstabe 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
    
  • Opcional double-check: Duplo-check que /boot/efi/EFI/ubuntu/grub/grub.cfgcontém linhas que incluem insmod luks, cryptomount -u <UUID>, as entradas de inicialização corretos, etc. e verifique que o seu initrd contém o cryptsetupbinário. 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. (Existem muitas configurações automáticas mágicas.) Isso pode acontecer se você divergir deste guia, por exemplo, usando o ZFS ou tentando particionar sda3_crypt.

  • (Se você 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 da edição do grub-mkconfig / update-initrd), /usr/sbin/grub-mkconfigadicionar || trueà linha 139 (que começa com GRUB_DEVICE=), adicionar GRUB_DEVICE="/dev/mapper/sda3_crypt"à /etc/default/grub, criar arquivo /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupcom conteúdo export CRYPTSETUP=ye arquivo /etc/initramfs-tools/conf.d/cryptrootcom conteúdo target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. Tudo isso além das etapas que você executaria se não estivesse criptografando a partição ZFS (como instalar zfs userspace utils no sistema ativo e durante o chroot e excluir a linha que monta /no fstab).

  • Saia do chroot e reinicie no 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 solicitando sua senha. Então você terá o menu de inicialização. Depois de escolher o Ubuntu, sua senha será solicitada novamente. Então você estará em seu sistema. Leia mais sobre como o Ubuntu usa o BTRFS .

  • TODO : Crie swap criptografado (dica: envolve editar o crypttab, fstab e executar novamente update-initrd).

  • TODO : Salve sua senha para que você só precise inseri-la uma vez no grub. Isso é detalhado aqui .

Atualizações

  • Toda vez que você instala um novo kernel, você deve executar o grub-mkconfig comando .
  • Toda vez que você atualiza o grub, você deve executar o grub-installcomando customizado .

Outras notas

  • É tentador criar um único volume criptografado e particioná-lo para criar a partição swap (e possivelmente outras), mas isso não funciona. O grub-mkconfig e o update-initrd se comportarão mal. No entanto, eu não tentei o LVM.
  • Pode ser tentador usar um arquivo de troca sobre o btrfs , mas provavelmente é uma má ideia por causa do desempenho.
Aleksandr Dubinsky
fonte
Apenas esclarecendo o que acho que você já sabe (por seu comentário): fstabe crypttabna verdade não está correto na pergunta. crypttabdeve apontar para o uuiddos /dev/sdxYdispositivos brutos ; fstabdeve apontar para os dispositivos de criptografia abertos em /dev/mapper/label.
Hendy
Obrigado por fazer esta resposta, isso me ajudou a configurá-la.
x13
Na verdade, eu não considero nada desse FDE verdadeiro, pois há informações de partição vazadas. O True FDE está fazendo com que todos os setores sejam dados criptografados (com exceção do cabeçalho LUKS no início, embora isso tecnicamente não seja necessário usando um cabeçalho desanexado). Eu faço o FDE usando o LVM dentro do LUKS, portanto ele definitivamente funciona e pode ser melhor se você precisar alterar os tamanhos de partição / volume posteriormente. Aqui está um post antigo no 12.04, mas deve funcionar em versões posteriores.
grosseiro
Além disso, usando um arquivo de swap em Btrfs é definitivamente uma má idéia ...
grosseiro
Nas suas grub-installinstruções, você tem um --bootloader=ubuntuparâmetro Não consigo encontrar esse argumento nos manuais do Ubuntu ou do GNU . Você poderia esclarecer o que faz ou onde está documentado?
Samuel Harmer