การเข้ารหัสดิสก์แบบเต็ม Ubuntu ด้วยการเข้ารหัส / การบูต


15

ฉันกำลังพยายามติดตั้งดิสก์ที่เข้ารหัสเต็มรูปแบบด้วย/bootพาร์ติชันแยกต่างหากและฉันมีปัญหา

ฉันจะจดขั้นตอนที่ฉันติดตามบน Ubuntu 15.04 เซสชันดีวีดีสด

  • เติมดิสก์ด้วย 'ข้อมูลสุ่ม'

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • สร้างพาร์ติชัน (โดยใช้ gparted)

    1. สร้างตารางพาร์ติชัน - gpt 2
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 linux-swap 4GB #swap
      • / dev / sda3 ext4 15 GB # ราก
      • / dev / sda4 ext4 FREESPACE #home
  • เข้ารหัสโวลุ่ม

    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

    cryptsetup luksOpen /dev/sda1 boot
    cryptsetup luksOpen /dev/sda2 swap
    cryptsetup luksOpen /dev/sda3 root
    cryptsetup luksOpen /dev/sda4 home
    
  • รูปแบบ

    mkfs.ext2 /dev/mapper/boot
    mkswap /dev/mapper/swap
    mkfs.ext4 /dev/mapper/root
    mkfs.ext2 /dev/mapper/home
    
  • ติดตั้ง (ใช้ Ubiquity)

    • ตัวโหลดบูตบน / dev / sda
    • / dev / sda1 - ใช้เป็น ext2 - mount point / boot
    • / dev / sda2 - ใช้เป็น ext2 - mount point / boot
    • / dev / sda3 - ใช้เป็น ext2 - mount point / boot
    • / dev / sda4 - ใช้เป็น ext2 - mount point / boot

    ในตอนท้ายโปรแกรมติดตั้งเตือนว่าการติดตั้งด้วงไม่สำเร็จ (เนื่องจากไดรฟ์ข้อมูลการเข้ารหัสถูกเข้ารหัส) ดังนั้นให้เลือก 'ดำเนินการต่อโดยไม่ใช้ bootloader'

  • ล้างปริมาณการบูต

    mkfs.ext2 /dev/mapper/boot
    
  • เมานต์ระดับเสียง

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • อัปเดต fstab และ 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
    
  • อัปเดตอิมเมจเริ่มต้น

    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
    
  • กำหนดค่า 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:"
    
  • สร้างไฟล์กำหนดค่า

    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
    
  • ลองข้างนอก

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

ฉันทำผิดพลาดมาก่อนหน้านี้หรือไม่? ฉันจะกำหนดค่าและติดตั้งด้วงอย่างถูกต้องได้อย่างไร?


ฉันรู้สึกแย่ที่หลังจากคุณย้าย Q ไปยังไซต์ "ถูกต้อง" ไม่มีใครช่วยได้ ฉันไม่ได้ทำงานระดับนี้ใน Ubuntu แต่ฉันดู google สำหรับgrub+ ชื่อของคุณ ฉันคิดว่าคุณพบขั้นตอนการเข้ารหัสของคุณที่pavelkogan.com/2014/05/23/luks-full-disk-encrypt (ซึ่งเป็นการค้นหา google ครั้งแรกในหัวข้อนี้) ถ้าไม่เช่นนั้นอาจช่วยได้ คำถามที่ดี! และโชคดี!
shellter

สองสิ่ง: 1. คุณพูดถึง/bootว่าเป็นจุดเมานท์สำหรับทุกสิ่ง ฉันหวังว่าเป็นตัวพิมพ์ผิด 2. คุณไม่ได้เมา/devในขณะที่ chrooting แต่คุณไม่เมา devpts Oo
muru

ความผิดพลาดอีกประการหนึ่งก็คือคุณใช้ UUID เดียวกันใน crypttab และ fstab fstab ควรใช้ UUIDs ของ / dev / mapper / ไดรฟ์
Aleksandr Dubinsky

1
ชำระเงินคู่มือนี้โดยสมาชิกชุมชน Ubuntu ฉันใช้มันและมันใช้งานได้ดีมากสำหรับฉัน
kapad

คำตอบ:


13

คุณทำผิดพลาดบ้าง แต่ปัญหาหลักอยู่ที่ความแพร่หลายและด้วง โดยทั่วไปเมื่อคุณตั้งค่า/ให้เป็นพาร์ติชั่นที่เข้ารหัสและไม่ได้สร้างพาร์ติชันแยกต่างหากสำหรับ/bootด้วงจะมีข้อความแสดงข้อผิดพลาดดังนี้:

ฉันรู้ว่า/bootถูกเข้ารหัส คุณจะต้องตั้งอยู่ในGRUB_ENABLE_CRYPTODISK=y /etc/default/grubฉันจะไม่ทำเพื่อคุณดังนั้นฉันจะล้มเหลวและการติดตั้งของคุณจะหยุด

ภาพรวมของกระบวนการ

  • เราใช้โหมด EFI
  • เราติดตั้งไปยัง/bootพาร์ติชันที่ไม่ได้เข้ารหัสและ btrfs ที่เข้ารหัส/โดยใช้ตัวติดตั้งมาตรฐาน
  • หลังจากตัวติดตั้งเสร็จสิ้นเราchrootทำการเปลี่ยนแปลงการกำหนดค่าที่สำคัญบางอย่างและติดตั้งด้วงใหม่ไปยังพาร์ติชันระบบ EFI และสร้าง initrd ใหม่

ขั้นตอนอย่างละเอียด

  • บูตจาก Ubuntu ติดตั้งดิสก์ 16.04 (ทดสอบกับ Xubuntu)
  • เชื่อมต่อกับอินเทอร์เน็ตและเรียกใช้sudo apt update && sudo apt upgradeเพื่ออัปเดตองค์ประกอบของตัวติดตั้ง
  • ใช้fdisk, gpartedหรือเครื่องมืออื่นเพื่อสร้าง 3 พาร์ติชั่น:
    • ตารางพาร์ติชัน GPT
    • พาร์ติชั่น 200MB ที่เราจะใช้สำหรับพาร์ติชันระบบ EFI
    • พาร์ติชั่นหลายกิกะไบต์ที่ในที่สุดเราจะใช้เป็นพาร์ติชั่นสว็อปที่เข้ารหัสของเรา, แต่จะทำหน้าที่เหมือนไม่มีการเข้ารหัสชั่วคราวของเรา /boot
    • พาร์ติชันเข้ารหัสที่ใช้พื้นที่ที่เหลือ
  • เตรียมพาร์ติชันเข้ารหัส

    sudo cryptsetup luksFormat /dev/sda3
    sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
    sudo mkfs.btrfs /dev/mapper/sda3_crypt
    
  • ติดตั้ง Ubuntu

    • เลือก "อย่างอื่น" เมื่อถูกถามเกี่ยวกับประเภทการติดตั้ง
    • กำหนดค่า/dev/sda1เป็นEFI System Partition
    • กำหนดค่า/dev/sda2เป็น ext2 จัดรูปแบบด้วยจุดเมานต์ของ/boot
    • กำหนดค่า/dev/mapper/sda3_cryptเป็น btrfs พร้อมจุดเมานต์ของ/
    • ดำเนินการติดตั้งต่อ
    • หลังจากเสร็จสิ้นเลือกที่จะอยู่ในระบบสด (ไม่รีบูต)
  • คัดลอกเนื้อหาของ/bootและทำ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
    
  • (ทุกอย่างกำลังเกิดขึ้นเหมือนchrootในระบบใหม่ของคุณ

  • เพิ่มบรรทัดไปยัง /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • /etc/crypttabเพิ่มบรรทัด คุณจะต้องเรียกใช้ก่อนsudo blkidเพื่อค้นหา UUID ของ/dev/sda3(ไม่/dev/mapper/sda3_crypt)

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • แก้ไขและลบบรรทัดสำหรับ/etc/fstab /bootรายการอื่น ๆ ถูกต้อง

  • ติดตั้งด้วงไปยังพาร์ติชันระบบ EFI สร้าง grub.cfg ใหม่และเตรียม 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
    
  • เลือกตรวจสอบซ้ำอีกครั้ง:ตรวจสอบอีกครั้งว่า/boot/efi/EFI/ubuntu/grub/grub.cfgมีบรรทัดที่รวมinsmod luks, cryptomount -u <UUID>รายการบูตที่ถูกต้อง ฯลฯ และตรวจสอบอีกครั้งว่า initrd ของคุณมีcryptsetupไบนารี หากสิ่งเหล่านี้หายไปอาจเป็นเพราะ grub-mkconfig และ / หรือ update-initrd ไม่สามารถหาปริมาณที่คุณติดตั้งหรือระบุใน fstab เกี่ยวข้องกับปริมาณที่เข้ารหัสใน crypttab (มีการกำหนดค่าอัตโนมัติจำนวนมากที่น่าอัศจรรย์) สิ่งนี้อาจเกิดขึ้นหากคุณเบี่ยงเบนจากคู่มือนี้โดยใช้ ZFS หรือพยายามแบ่งพาร์ติชัน sda3_crypt

  • (หากใช้ ZFS แทน btrfs) grub-mkconfig และ update-initrd จะไม่รู้จัก ZFS วิธีแก้ปัญหาที่เกี่ยวข้องกับ (ช่วง chroot ก่อนที่จะมีด้วง mkconfig / ปรับปรุง initrd) แก้ไข/usr/sbin/grub-mkconfigเพื่อเพิ่ม|| trueไปยังสาย 139 (ซึ่งเริ่มต้นด้วยGRUB_DEVICE=) เพิ่มGRUB_DEVICE="/dev/mapper/sda3_crypt"การ/etc/default/grubสร้างไฟล์/usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupที่มีเนื้อหาexport CRYPTSETUP=yและไฟล์ที่มีเนื้อหา/etc/initramfs-tools/conf.d/cryptroot target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discardทั้งหมดนี้เป็นนอกเหนือจากขั้นตอนที่คุณจะทำหากคุณไม่ได้เข้ารหัสพาร์ทิชัน ZFS (เช่นการติดตั้งผู้ใช้ zfs userpace utils ทั้งในระบบสดและระหว่าง chroot และการลบบรรทัดที่เมานต์/ใน fstab)

  • ออกจาก chroot และรีบูตเข้าสู่ระบบใหม่ของคุณ

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • คุณควรเห็นด้วงขอรหัสผ่านของคุณ จากนั้นคุณจะได้รับเมนูการบูต หลังจากเลือก Ubuntu คุณจะถูกขอรหัสผ่านอีกครั้ง จากนั้นคุณจะอยู่ในระบบของคุณ อ่านเพิ่มเติมเกี่ยวกับวิธีการใช้อูบุนตู BTRFS

  • สิ่งที่ต้องทำ : สร้างการแลกเปลี่ยนที่เข้ารหัส (คำใบ้: มันเกี่ยวข้องกับการแก้ไข crypttab, fstab และทำงานอีกครั้งupdate-initrd)

  • สิ่งที่ต้องทำ : บันทึกรหัสผ่านของคุณดังนั้นคุณจะต้องป้อนเพียงครั้งเดียวในด้วง นี้เป็นรายละเอียดที่นี่

อัพเกรด

  • ทุกครั้งที่คุณติดตั้งเคอร์เนลใหม่คุณควรรันgrub-mkconfigคำสั่งที่กำหนดเอง
  • ทุกครั้งที่คุณอัพเดตด้วงคุณควรรันgrub-installคำสั่งที่กำหนดเอง

บันทึกอื่น ๆ

  • มันเป็นการดึงดูดให้สร้างโวลุ่มที่เข้ารหัสลับเดียวและแบ่งพาร์ติชันเพื่อสร้าง swap partition (และอาจเป็นอย่างอื่น) แต่สิ่งนี้ไม่ได้ผล ทั้ง grub-mkconfig และ update-initrd จะทำงานผิดปกติ อย่างไรก็ตามฉันยังไม่ได้ลอง LVM
  • อาจเป็นการดึงดูดให้ใช้swapfile ที่ด้านบนของ btrfsแต่อาจเป็นความคิดที่ไม่ดีเนื่องจากประสิทธิภาพ

เพียงชี้แจงสิ่งที่ฉันคิดว่าคุณรู้แล้ว (ตามความคิดเห็นของคุณ): fstabและcrypttabจริง ๆ แล้วไม่ถูกต้องในคำถาม crypttabควรชี้ไปที่อุปกรณ์uuidดิบ/dev/sdxY; ควรชี้ไปที่อุปกรณ์ฝังศพใต้ถุนโบสถ์เปิดfstab /dev/mapper/label
Hendy

ขอบคุณที่ทำคำตอบนี้มันช่วยให้ฉันตั้งค่านี้ได้
x13

จริง ๆ แล้วฉันไม่พิจารณา FDE ที่แท้จริงนี้เนื่องจากมีข้อมูลพาร์ติชันรั่วไหลออกมา True FDE กำลังให้ทุกภาคส่วนมีการเข้ารหัสข้อมูล (ยกเว้นส่วนหัว LUKS ที่จุดเริ่มต้นแม้ว่าจะไม่จำเป็นต้องใช้เทคนิคในการใช้ส่วนหัวที่แยกออก) ฉันใช้ FDE โดยใช้ LVM ภายใน LUKS ดังนั้นจึงใช้งานได้จริงและอาจดีกว่าถ้าคุณต้องการเปลี่ยนขนาดพาร์ติชัน / โวลุ่มในภายหลัง นี่คือบล็อกโพสต์เก่าในการทำเช่นนี้ใน 12.04 แต่ควรทำงานในรุ่นที่ใหม่กว่า
งี่เง่า

นอกจากนี้การใช้ swapfile บน BTRFS เป็นแน่นอนคิดที่ไม่ดี ...
งี่เง่า

ในgrub-installคำสั่งของคุณคุณมี--bootloader=ubuntuพารามิเตอร์ ฉันไม่สามารถหาข้อโต้แย้งนั้นในคู่มือของUbuntuหรือGNU คุณช่วยอธิบายให้ชัดเจนว่ามันทำอะไรหรืออยู่ที่ไหนในเอกสาร?
ซามูเอลฮาร์เมอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.