Mã hóa toàn bộ đĩa Ubuntu với mã hóa / khởi động


15

Tôi đang cố gắng thiết lập một đĩa được mã hóa đầy đủ với một /bootphân vùng riêng và tôi gặp một số rắc rối.

Tôi sẽ viết ra quy trình tôi đã thực hiện trên phiên DVD Live Ubuntu 15.04.

  • Đổ đầy đĩa với 'dữ liệu ngẫu nhiên'

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • Tạo các phân vùng (sử dụng gparted)

    1. Tạo bảng phân vùng - gpt 2.
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 linux-exchange 4GB #swap
      • / dev / sda3 ext4 15 GB #root
      • / dev / sda4 ext4 TỰ DO #home
  • Khối lượng mã hóa

    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
    
  • Mở cryptovolume

    cryptsetup luksOpen /dev/sda1 boot
    cryptsetup luksOpen /dev/sda2 swap
    cryptsetup luksOpen /dev/sda3 root
    cryptsetup luksOpen /dev/sda4 home
    
  • định dạng

    mkfs.ext2 /dev/mapper/boot
    mkswap /dev/mapper/swap
    mkfs.ext4 /dev/mapper/root
    mkfs.ext2 /dev/mapper/home
    
  • Cài đặt (sử dụng Ubiquity)

    • bộ tải khởi động trên / dev / sda
    • / dev / sda1 - sử dụng như ext2 - điểm gắn kết / khởi động
    • / dev / sda2 - sử dụng như ext2 - điểm gắn kết / khởi động
    • / dev / sda3 - sử dụng như ext2 - điểm gắn kết / khởi động
    • / dev / sda4 - sử dụng như ext2 - điểm gắn kết / khởi động

    Cuối cùng, trình cài đặt cảnh báo rằng cài đặt grub không thành công (vì khối lượng khởi động được mã hóa), vì vậy hãy chọn 'tiếp tục mà không có bộ tải khởi động'.

  • Làm sạch khối lượng khởi động

    mkfs.ext2 /dev/mapper/boot
    
  • Khối lượng gắn kết

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Cập nhật fstab và 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
    
  • tiền điện tử

    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
    
  • Cập nhật hình ảnh 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
    
  • Cấu hình bộ nạp khởi động ( /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:"
    
  • tạo tập tin cấu hình

    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
    
  • thử bên ngoài

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

Tôi đã phạm sai lầm nào trước đây? Làm thế nào tôi có thể tiếp tục cấu hình và cài đặt grub chính xác?


Tôi cảm thấy tồi tệ vì sau khi khiến bạn chuyển Q sang trang "chính xác", không ai giúp đỡ. Tôi chưa thực hiện được mức độ công việc này trong Ubuntu. Nhưng tôi đã tìm trên google cho grub+ tiêu đề của bạn. Tôi cho rằng bạn đã tìm thấy quy trình mã hóa của mình tại pavelkogan.com/2014/05/23/luks-full-disk-encoding (đây là tìm kiếm google đầu tiên về chủ đề này). Nếu không, có lẽ điều đó sẽ giúp. Câu hỏi hay! và chúc may mắn!
shellter 6/2/2016

Vài điều: 1. Bạn đề cập đến /bootnhư là điểm gắn kết cho tất cả mọi thứ. Tôi hy vọng đó là một lỗi đánh máy. 2. Bạn đã không gắn kết /devtrong khi chroot, nhưng bạn đã gắn kết devpts. Oo
muru

Một sai lầm khác là bạn dường như đang sử dụng cùng một UUID trong crypttab và fstab. fstab thực sự nên sử dụng các UUID của / dev / mapper / drive.
Alexanderr Dubinsky

1
kiểm tra hướng dẫn này bởi một thành viên cộng đồng Ubuntu. Tôi đã sử dụng nó và nó hoạt động rất tốt cho tôi.
kapad

Câu trả lời:


13

Bạn đã phạm một số sai lầm, nhưng vấn đề chính là ở tính phổ biến và grub. Về cơ bản, khi bạn đặt thành /phân vùng được mã hóa và không tạo phân vùng riêng /boot, grub sẽ đưa ra thông báo lỗi như:

Tôi biết /bootlà được mã hóa. Bạn cần phải thiết lập GRUB_ENABLE_CRYPTODISK=ytrong /etc/default/grub. Tôi sẽ không làm điều đó cho bạn, vì vậy tôi sẽ thất bại và cài đặt của bạn sẽ dừng lại.

Tổng quan về quá trình

  • Chúng tôi sử dụng chế độ EFI.
  • Chúng tôi cài đặt vào một /bootphân vùng không được mã hóa và btrfs được mã hóa /bằng trình cài đặt tiêu chuẩn.
  • Sau khi trình cài đặt kết thúc, chúng tôi chroot, thực hiện một số thay đổi cấu hình quan trọng và cài đặt lại grub vào Phân vùng hệ thống EFI và tạo lại initrd.

Các bước chi tiết

  • Khởi động từ đĩa cài đặt Ubuntu 16.04 (đã thử nghiệm với Xubfox).
  • Kết nối với Internet và chạy sudo apt update && sudo apt upgradeđể cập nhật các thành phần cài đặt
  • Sử dụng fdisk, gpartedhoặc công cụ khác để tạo ra 3 phân vùng:
    • Bảng phân vùng GPT
    • Phân vùng 200 MB mà chúng tôi sẽ sử dụng cho Phân vùng hệ thống EFI
    • Phân vùng nhiều gigabyte mà cuối cùng chúng ta sẽ sử dụng làm phân vùng trao đổi được mã hóa, nhưng sẽ hoạt động như không được mã hóa tạm thời /boot
    • Một phân vùng được mã hóa sử dụng phần còn lại của không gian
  • Chuẩn bị phân vùng được mã hóa

    sudo cryptsetup luksFormat /dev/sda3
    sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
    sudo mkfs.btrfs /dev/mapper/sda3_crypt
    
  • Cài đặt Ubuntu

    • Chọn "Cái gì khác" khi được hỏi về loại cài đặt.
    • Định cấu hình /dev/sda1EFI System Partition
    • Định cấu hình /dev/sda2là ext2, được định dạng, với điểm gắn kết là/boot
    • Định cấu hình /dev/mapper/sda3_cryptlà btrfs với điểm gắn kết của/
    • Tiếp tục cài đặt.
    • Sau khi kết thúc, chọn ở lại trong hệ thống trực tiếp (không khởi động lại).
  • Sao chép nội dung của /bootvà làm mộtchroot

    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
    
  • (Mọi thứ hiện đang diễn ra như chrootbên trong hệ thống mới của bạn.)

  • Thêm dòng vào /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • Thêm dòng vào /etc/crypttab. Trước tiên, bạn cần chạy sudo blkidđể tìm UUID của /dev/sda3(KHÔNG /dev/mapper/sda3_crypt).

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Chỉnh sửa /etc/fstabvà xóa dòng cho /boot. Các mục khác là chính xác.

  • Cài đặt grub vào Phân vùng hệ thống EFI, tạo grub.cfg mới và chuẩn bị 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
    
  • Tùy chọn đúp kiểm tra: Kiểm tra kỹ xem /boot/efi/EFI/ubuntu/grub/grub.cfgcó chứa đường bao gồm insmod luks, cryptomount -u <UUID>, các mục khởi động đúng, vv Và đúp kiểm initrd của bạn có chứa cryptsetupnhị phân. Nếu những thứ này bị thiếu, đó là do grub-mkconfig và / hoặc update-initrd không thể tìm ra khối lượng mà bạn đã gắn hoặc chỉ định trong fstab liên quan đến khối lượng được mã hóa trong crypttab. (Có rất nhiều phép tự động cấu hình ma thuật mà họ làm.) Điều này có thể xảy ra nếu bạn chuyển hướng khỏi hướng dẫn này, ví dụ, bằng cách sử dụng ZFS hoặc bằng cách phân vùng sda3_crypt.

  • (Nếu sử dụng ZFS thay vì btrfs) grub-mkconfig và update-initrd sẽ không nhận ra ZFS. Cách giải quyết liên quan đến (trong chroot, trước khi chỉnh sửa grub-mkconfig / update-initrd) /usr/sbin/grub-mkconfigđể thêm || truevào dòng 139 (bắt đầu bằng GRUB_DEVICE=), thêm GRUB_DEVICE="/dev/mapper/sda3_crypt"vào /etc/default/grub, tạo tệp /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupcó nội dung export CRYPTSETUP=yvà tệp /etc/initramfs-tools/conf.d/cryptrootcó nội dung target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. Tất cả những điều này ngoài các bước bạn sẽ thực hiện nếu bạn không mã hóa phần ZFS (như cài đặt các tiện ích không gian người dùng zfs trong cả hệ thống trực tiếp và trong khi chroot và xóa dòng gắn kết /trong fstab).

  • Thoát chroot và khởi động lại vào hệ thống mới của bạn

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • Bạn sẽ thấy grub hỏi mật khẩu của bạn. Sau đó, bạn sẽ nhận được menu khởi động. Sau khi chọn Ubuntu, bạn sẽ được hỏi lại mật khẩu. Sau đó, bạn sẽ ở trong hệ thống của bạn. Đọc thêm về cách Ubuntu sử dụng BTRFS .

  • TODO : Tạo trao đổi được mã hóa (gợi ý: nó liên quan đến việc chỉnh sửa crypttab, fstab và chạy lại update-initrd).

  • TODO : Lưu mật khẩu của bạn để bạn chỉ cần nhập một lần vào grub. Đây là chi tiết ở đây .

Nâng cấp

  • Mỗi khi bạn cài đặt kernel mới, bạn nên chạy grub-mkconfiglệnh tùy chỉnh .
  • Mỗi khi bạn cập nhật grub, bạn nên chạy grub-installlệnh tùy chỉnh .

Ghi chú khác

  • Thật hấp dẫn khi tạo một khối được mã hóa duy nhất và phân vùng nó để tạo phân vùng trao đổi (và có thể là các phân vùng khác), nhưng điều này không hoạt động. Cả grub-mkconfig và update-initrd đều hoạt động sai. Tuy nhiên, tôi chưa thử LVM.
  • Nó có thể hấp dẫn để sử dụng một hoán đổi trên đầu trang của btrfs , nhưng có lẽ đó là một ý tưởng tồi vì hiệu suất.

Chỉ cần làm rõ những gì tôi nghĩ bạn đã biết (theo nhận xét của bạn): fstabcrypttabthực sự không chính xác trong câu hỏi. crypttabnên trỏ đến các thiết bị uuidthô /dev/sdxY; fstabnên trỏ đến các thiết bị mật mã đã mở tại /dev/mapper/label.
Hendy

Cảm ơn bạn đã thực hiện câu trả lời này, nó đã giúp tôi thiết lập nó.
x13

Tôi thực sự không xem xét bất kỳ FDE thực sự nào, vì có thông tin phân vùng bị rò rỉ. True FDE đang có tất cả các lĩnh vực được mã hóa dữ liệu (ngoại trừ tiêu đề LUKS ở đầu, mặc dù về mặt kỹ thuật không cần thiết bằng cách sử dụng tiêu đề tách rời). Tôi thực hiện FDE bằng LVM bên trong LUKS, vì vậy nó chắc chắn hoạt động và có thể đẹp hơn nếu bạn cần thay đổi kích thước phân vùng / âm lượng sau này. Đây là một bài đăng blog cũ về làm điều này trong 12.04, nhưng sẽ hoạt động trong các phiên bản sau.
crass

Ngoài ra, sử dụng một tệp hoán đổi trên BTRFS chắc chắn là một ý tưởng tồi ...
crass

Trong grub-installhướng dẫn của bạn , bạn có một --bootloader=ubuntutham số. Tôi dường như không thể tìm thấy đối số đó trong hướng dẫn sử dụng của Ubuntu hoặc GNU . Bạn có thể làm rõ những gì nó làm hoặc nơi nó được ghi lại?
Samuel Harmer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.