Enkripsi penuh disk Ubuntu dengan terenkripsi / boot

15

Saya mencoba men-setup disk terenkripsi lengkap dengan /bootpartisi terpisah dan saya mengalami beberapa masalah.

Saya akan menuliskan prosedur yang telah saya ikuti pada sesi DVD live Ubuntu 15.04.

  • Isi disk dengan 'data acak'

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • Buat partisi (menggunakan gparted)

    1. Buat Tabel Partisi - 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
  • Enkripsi volume

    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
    
  • Buka cryptovolume

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

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

    • boot loader di / dev / sda
    • / dev / sda1 - gunakan sebagai ext2 - mount point / boot
    • / dev / sda2 - gunakan sebagai ext2 - mount point / boot
    • / dev / sda3 - gunakan sebagai ext2 - mount point / boot
    • / dev / sda4 - gunakan sebagai ext2 - mount point / boot

    Pada akhirnya penginstal memperingatkan bahwa grub-install gagal (karena volume boot dienkripsi), jadi pilih 'lanjutkan tanpa bootloader'.

  • Bersihkan volume boot

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

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Perbarui fstab dan 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
    
  • Perbarui gambar 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
    
  • Konfigurasikan 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:"
    
  • buat file config

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

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

Apakah saya melakukan kesalahan sebelum ini? Bagaimana saya bisa terus mengkonfigurasi dan menginstal grub dengan benar?

Nicholas Roveda
sumber
Saya merasa sedih karena setelah Anda memindahkan Q Anda ke situs "yang benar", tidak ada yang membantu. Saya belum melakukan pekerjaan ini di Ubuntu. Tapi saya memang mencari di Google untuk grub+ judul Anda. Saya kira Anda menemukan prosedur Anda untuk mengenkripsi di pavelkogan.com/2014/05/23/luks-full-disk-encryption (yang merupakan pencarian google pertama tentang topik ini). jika tidak, mungkin itu akan membantu. Pertanyaan bagus! dan semoga beruntung!
kerang
Beberapa hal: 1. Anda menyebutkan /bootsebagai titik puncak untuk segalanya. Saya berharap itu salah ketik. 2. Anda tidak melakukan mount /devketika melakukan chroot, tetapi anda melakukan mount devpts. Oo
muru
Kesalahan lain adalah Anda tampaknya menggunakan UUID yang sama di crypttab dan fstab. fstab seharusnya menggunakan UUID dari drive / dev / mapper /.
Aleksandr Dubinsky
1
periksa ini panduan oleh anggota komunitas Ubuntu. Saya sudah menggunakannya dan itu bekerja sangat baik untuk saya.
kapad

Jawaban:

13

Anda membuat beberapa kesalahan, tetapi masalah utamanya adalah di mana-mana dan grub. Pada dasarnya, ketika Anda mengatur /untuk menjadi partisi terenkripsi dan tidak membuat partisi terpisah untuk /boot, grub memberikan pesan kesalahan seperti:

Saya tahu /bootdienkripsi. Anda perlu mengatur GRUB_ENABLE_CRYPTODISK=ydi /etc/default/grub. Saya tidak akan melakukannya untuk Anda, jadi saya akan gagal dan instalasi Anda akan berhenti.

Gambaran umum proses

  • Kami menggunakan mode EFI.
  • Kami menginstal ke /bootpartisi yang tidak terenkripsi dan btrf terenkripsi /menggunakan installer standar.
  • Setelah penginstal selesai, kami chroot, membuat beberapa perubahan konfigurasi penting, dan menginstal ulang grub ke Partisi Sistem EFI dan membuat ulang initrd.

Langkah-langkah rinci

  • Boot dari Ubuntu menginstal disk 16,04 (diuji dengan Xubuntu).
  • Sambungkan ke Internet dan jalankan sudo apt update && sudo apt upgrade untuk memperbarui komponen pemasang
  • Gunakan fdisk,, gpartedatau alat lain untuk membuat 3 partisi:
    • Tabel partisi GPT
    • Partisi 200MB yang akan kita gunakan untuk Partisi Sistem EFI
    • Partisi multi-gigabyte yang nantinya akan kita gunakan sebagai partisi swap terenkripsi kita, tetapi yang akan berfungsi sebagai sementara kita tidak terenkripsi /boot
    • Partisi terenkripsi yang menggunakan sisa ruang
  • Siapkan partisi terenkripsi

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

    • Pilih "Sesuatu yang lain" ketika ditanya tentang jenis instalasi.
    • Konfigurasikan /dev/sda1sebagaiEFI System Partition
    • Konfigurasi /dev/sda2sebagai ext2, diformat, dengan mount point of/boot
    • Konfigurasi /dev/mapper/sda3_cryptsebagai btrfs dengan mount point of/
    • Lanjutkan dengan instalasi.
    • Setelah selesai, pilih tetap di sistem live (jangan reboot).
  • Salin isi /bootdan lakukan achroot

    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
    
  • (Semuanya sekarang terjadi seperti chrootdi dalam sistem baru Anda.)

  • Tambahkan baris ke /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • Tambahkan baris ke /etc/crypttab. Anda harus menjalankan terlebih dahulu sudo blkiduntuk menemukan UUID /dev/sda3(BUKAN /dev/mapper/sda3_crypt).

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Edit /etc/fstabdan hapus baris untuk /boot. Entri lainnya benar.

  • Instal grub ke Partisi Sistem EFI, hasilkan grub.cfg baru, dan siapkan 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
    
  • Pemeriksaan ganda opsional: Periksa ulang yang /boot/efi/EFI/ubuntu/grub/grub.cfgberisi baris yang menyertakan insmod luks,, cryptomount -u <UUID>entri boot yang benar, dll. Dan periksa kembali apakah initrd Anda berisi cryptsetupbiner. Jika hal-hal ini hilang, itu karena grub-mkconfig dan / atau update-initrd tidak dapat mengetahui bagaimana volume yang telah Anda pasang atau tentukan di fstab berhubungan dengan volume terenkripsi di crypttab. (Ada banyak konfigurasi otomatis ajaib yang mereka lakukan.) Ini dapat terjadi jika Anda menyimpang dari panduan ini dengan, misalnya, menggunakan ZFS atau dengan mencoba mempartisi sda3_crypt.

  • (Jika menggunakan ZFS bukan btrfs) grub-mkconfig dan update-initrd tidak akan mengenali ZFS. Solusi yang melibatkan (selama chroot, sebelum grub-mkconfig / update-initrd) mengedit /usr/sbin/grub-mkconfiguntuk menambah || truegaris 139 (yang dimulai dengan GRUB_DEVICE=), menambahkan GRUB_DEVICE="/dev/mapper/sda3_crypt"untuk /etc/default/grub, membuat file /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupdengan isi export CRYPTSETUP=ydan berkas/etc/initramfs-tools/conf.d/cryptroot dengan isi target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. Semua ini merupakan tambahan untuk langkah-langkah yang akan Anda ambil jika Anda tidak mengenkripsi partisi ZFS (seperti menginstal zfs userspace utils di sistem live dan selama chroot dan menghapus baris yang dipasang /di fstab).

  • Keluar dari chroot dan reboot ke sistem baru Anda

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • Anda akan melihat grub meminta kata sandi Anda. Maka Anda akan mendapatkan menu boot. Setelah memilih Ubuntu Anda akan diminta kata sandi lagi. Maka Anda akan berada di sistem Anda. Baca lebih lanjut tentang bagaimana Ubuntu menggunakan BTRFS .

  • MELAKUKAN : Buat swap terenkripsi (petunjuk: ini melibatkan pengeditan crypttab, fstab, dan menjalankan kembali update-initrd).

  • TODO : Simpan kata sandi Anda sehingga Anda hanya perlu memasukkannya sekali ke grub. Ini detail sini .

Upgrade

  • Setiap kali Anda menginstal kernel baru, Anda harus menjalankan custom grub-mkconfig perintah .
  • Setiap kali Anda memperbarui grub, Anda harus menjalankan custom grub-install perintah .

Catatan lain

  • Sangat menggoda untuk membuat volume terenkripsi tunggal dan mempartisinya untuk membuat partisi swap (dan mungkin yang lain), tetapi ini tidak berhasil. Baik grub-mkconfig dan update-initrd akan mengalami kesalahan. Namun, saya belum mencoba LVM.
  • Mungkin tergoda untuk menggunakan swapfile di atas btrfs , tetapi mungkin itu ide yang buruk karena kinerja.
Aleksandr Dubinsky
sumber
Hanya mengklarifikasi apa yang saya pikir Anda sudah tahu (per komentar Anda): fstabdan crypttabsebenarnya tidak benar dalam pertanyaan. crypttabharus menunjuk ke perangkat uuidmentah /dev/sdxY; fstabharus menunjuk ke perangkat crypt yang dibuka di /dev/mapper/label.
Hendy
Terima kasih telah membuat jawaban ini, ini membantu saya mengaturnya.
x13
Saya sebenarnya tidak mempertimbangkan FDE yang benar ini, karena ada informasi partisi yang bocor. True FDE membuat semua sektor dienkripsi data (dengan pengecualian header LUKS di awal, meskipun secara teknis tidak diperlukan dengan menggunakan header terpisah). Saya melakukan FDE menggunakan LVM di dalam LUKS, jadi pasti berfungsi dan bisa lebih baik jika Anda perlu mengubah ukuran partisi / volume nanti. Berikut adalah posting blog lama tentang melakukan ini di 12,04, tetapi harus berfungsi dalam versi yang lebih baru.
kasar
Juga, menggunakan swapfile di BTRFS jelas merupakan ide yang buruk ...
crass
Dalam grub-installinstruksi Anda, Anda memiliki --bootloader=ubuntuparameter. Saya tidak bisa menemukan argumen itu di manual Ubuntu atau GNU . Bisakah Anda menjelaskan apa fungsinya atau di mana dokumen itu didokumentasikan?
Samuel Harmer