Crittografia del disco completo di Ubuntu con crittografia / avvio


15

Sto cercando di installare un disco crittografato completo con una /bootpartizione separata e ho dei problemi.

Scriverò la procedura che ho seguito su una sessione di Live DVD di Ubuntu 15.04.

  • Riempi il disco con "dati casuali"

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • Crea le partizioni (usando gparted)

    1. Crea tabella delle partizioni - gpt 2.
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 linux-swap 4GB #swap
      • / dev / sda3 ext4 15 GB #root
      • / dev / sda4 ext4 FREESPACE #home
  • Crittografa i volumi

    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
    
  • Apri criptovolume

    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
    
  • Installa (usando Ubiquity)

    • boot loader su / dev / sda
    • / dev / sda1 - usa come ext2 - mount point / boot
    • / dev / sda2 - usa come ext2 - mount point / boot
    • / dev / sda3 - usa come ext2 - mount point / boot
    • / dev / sda4 - usa come ext2 - mount point / boot

    Alla fine il programma di installazione avverte che l'installazione di grub non è riuscita (perché il volume di avvio è crittografato), quindi scegliere "continua senza bootloader".

  • Pulisci volume di avvio

    mkfs.ext2 /dev/mapper/boot
    
  • Montare il volume

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Aggiorna 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
    
  • Aggiorna l'immagine di 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
    
  • Configura bootloader ( /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:"
    
  • creare un file di configurazione

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

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

Ho fatto qualche errore prima di questo? Come posso continuare a configurare e installare Grub correttamente?


Mi sento male che dopo averti portato a spostare la tua Q sul sito "corretto", nessuno ti ha aiutato. Non ho fatto questo livello di lavoro in Ubuntu. Ma ho cercato su Google il grubtuo + titolo. Suppongo che tu abbia trovato la tua procedura per la crittografia su pavelkogan.com/2014/05/23/luks-full-disk-encryption (che è la prima ricerca su Google su questo argomento). in caso contrario, forse sarà di aiuto. Buona domanda! e buona fortuna!
shellter

Un paio di cose: 1. Citi /bootcome punto di montaggio per tutto. Spero sia un errore di battitura. 2. Non hai montato /devdurante il chrooting, ma hai montato mount. Oo
muru,

Un altro errore è che sembra che tu stia utilizzando gli stessi UUID in crypttab e fstab. fstab dovrebbe effettivamente usare gli UUID di / dev / mapper / drives.
Aleksandr Dubinsky,

1
consulta questa guida da un membro della comunità Ubuntu. L'ho usato e funziona molto bene per me.
Kapad,

Risposte:


13

Hai commesso degli errori, ma il problema principale è l'ubiquità e la grub. Fondamentalmente, quando si imposta /una partizione crittografata e non si crea una partizione separata per /boot, grub visualizza un messaggio di errore del tipo:

So che /bootè crittografato. È necessario impostare GRUB_ENABLE_CRYPTODISK=yin /etc/default/grub. Non lo farò per te, quindi fallirò e la tua installazione si fermerà.

Una panoramica del processo

  • Usiamo la modalità EFI.
  • Installiamo su una /bootpartizione non crittografata e su un btrfs crittografato /usando il programma di installazione standard.
  • Al termine dell'installazione chroot, apportiamo alcune importanti modifiche alla configurazione e reinstalliamo grub nella partizione di sistema EFI e ricreamo initrd.

I passaggi dettagliati

  • Avvio dal disco di installazione di Ubuntu 16.04 (testato con Xubuntu).
  • Collegati a Internet ed esegui sudo apt update && sudo apt upgradeper aggiornare i componenti del programma di installazione
  • Utilizzare fdisk, gpartedo un altro strumento per creare 3 partizioni:
    • Una tabella delle partizioni GPT
    • Una partizione da 200 MB che useremo per la partizione di sistema EFI
    • Una partizione multi-gigabyte che alla fine useremo come nostra partizione di swap crittografata, ma che funzionerà come la nostra temporanea non crittografata /boot
    • Una partizione crittografata che utilizza il resto dello spazio
  • Preparare la partizione crittografata

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

    • Scegli "Qualcos'altro" quando ti viene chiesto il tipo di installazione.
    • Configura /dev/sda1comeEFI System Partition
    • Configurare /dev/sda2come ext2, formattato, con mount point di/boot
    • Configurare /dev/mapper/sda3_cryptcome btrfs con mount point di/
    • Continua con l'installazione.
    • Al termine, scegli di rimanere nel sistema live (senza riavvio).
  • Copia il contenuto /boote fai unchroot

    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
    
  • (Ora sta succedendo tutto come chrootnel tuo nuovo sistema.)

  • Aggiungi linea a /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • Aggiungi linea a /etc/crypttab. Dovrai prima eseguire sudo blkidper trovare l'UUID di /dev/sda3(NOT /dev/mapper/sda3_crypt).

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Modifica /etc/fstabed elimina la riga per /boot. Le altre voci sono corrette.

  • Installa grub sulla partizione di sistema EFI, genera un nuovo grub.cfg e prepara 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
    
  • Doppio controllo opzionale: ricontrolla che /boot/efi/EFI/ubuntu/grub/grub.cfgcontenga righe che includano insmod luks, cryptomount -u <UUID>le voci di avvio corrette, ecc. E ricontrolla che il tuo initrd contenga il cryptsetupbinario. Se mancano queste cose, è perché grub-mkconfig e / o update-initrd non sono riusciti a capire come i volumi che hai montato o specificato in fstab si collegano al volume crittografato in crypttab. (C'è molta autoconfigurazione magica che fanno.) Questo può accadere se divergi da questa guida, ad esempio usando ZFS o provando a partizionare sda3_crypt.

  • (Se si utilizza ZFS invece di btrfs) grub-mkconfig e update-initrd non riconosceranno ZFS. La soluzione alternativa prevede (durante chroot, prima di grub-mkconfig / update-initrd) la modifica /usr/sbin/grub-mkconfigda aggiungere || truealla riga 139 (che inizia con GRUB_DEVICE=), l'aggiunta GRUB_DEVICE="/dev/mapper/sda3_crypt"a /etc/default/grub, la creazione di file /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupcon contenuti export CRYPTSETUP=ye file /etc/initramfs-tools/conf.d/cryptrootcon contenuti target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. Tutto ciò è in aggiunta ai passaggi che eseguiresti se non stessi crittografando la parte ZFS (come l'installazione di utilities zfs userspace sia nel sistema live che durante chroot e l'eliminazione della linea che monta /in fstab).

  • Esci da chroot e riavvia il tuo nuovo sistema

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • Dovresti vedere grub che richiede la tua password. Quindi otterrai il menu di avvio. Dopo aver scelto Ubuntu ti verrà nuovamente richiesta la password. Allora sarai nel tuo sistema. Maggiori informazioni su come Ubuntu utilizza BTRFS .

  • TODO : Crea swap crittografato (suggerimento: comporta la modifica di crypttab, fstab e riesecuzione update-initrd).

  • TODO : salva la tua password, quindi devi solo inserirla una volta in grub. Questo è dettagliato qui .

aggiornamenti

  • Ogni volta che si installa un nuovo kernel, è necessario eseguire il grub-mkconfigcomando personalizzato .
  • Ogni volta che aggiorni grub, dovresti eseguire il grub-installcomando personalizzato .

Altre note

  • È allettante creare un singolo volume crittografato e partizionarlo per creare la partizione di swap (e possibilmente altri), ma questo non funziona. Sia grub-mkconfig che update-initrd si comportano in modo errato. Tuttavia, non ho provato LVM.
  • Potrebbe essere allettante utilizzare un file di scambio in cima a btrfs , ma probabilmente è una cattiva idea a causa delle prestazioni.

Chiarendo solo quello che penso tu sappia già (per il tuo commento): fstabe in crypttabrealtà non sono corretti nella domanda. crypttabdovrebbe puntare ai dispositivi uuidgrezzi /dev/sdxY; fstabdovrebbe puntare ai dispositivi di cripta aperti su /dev/mapper/label.
Hendy,

Grazie per aver dato questa risposta, mi ha aiutato a configurarlo.
x13

In realtà non considero nulla di questo vero FDE, poiché trapelano informazioni sulla partizione. Il vero FDE prevede che tutti i settori siano dati crittografati (ad eccezione dell'intestazione LUKS all'inizio, anche se tecnicamente non è necessario utilizzando un'intestazione staccata). Faccio FDE usando LVM all'interno di LUKS, quindi funziona sicuramente e può essere più bello se è necessario modificare le dimensioni della partizione / volume in un secondo momento. Ecco un vecchio post sul blog su come farlo in 12.04, ma dovrebbe funzionare nelle versioni successive.
grossolano

Inoltre, utilizzare un file di scambio su BTRFS è sicuramente una cattiva idea ...
grossolano

Nelle tue grub-installistruzioni, hai un --bootloader=ubuntuparametro. Non riesco a trovare tale argomento nei manuali di Ubuntu o GNU . Potresti chiarire cosa fa o dove è documentato?
Samuel Harmer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.