Повне шифрування диска Ubuntu з зашифрованим / завантажувальним


15

Я намагаюся налаштувати повний зашифрований диск з окремим /bootрозділом, і у мене виникають проблеми.

Я запишу процедуру, яку я дотримувався на сесії Ubuntu 15.04 Live DVD.

  • Наповніть диск "випадковими даними"

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • Створіть розділи (використовуючи gparted)

    1. Створіть таблицю розділів - gpt 2.
      • / dev / sda1 ext2 1,5 Гб # boot
      • / dev / sda2 linux-swap 4 Гб # swap
      • / dev / sda3 ext4 15 Гб #root
      • / dev / sda4 ext4 БЕЗКОШТОВНО #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
    
  • Відкритий криптовалюта

    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
    
  • Встановити (використовуючи повсюдність)

    • завантажувач on / dev / sda
    • / dev / sda1 - використовувати як ext2 - точку монтажу / завантаження
    • / dev / sda2 - використовувати як ext2 - точку монтажу / завантаження
    • / dev / sda3 - використовувати як ext2 - точку монтажу / завантаження
    • / dev / sda4 - використовувати як ext2 - точку монтажу / завантаження

    Наприкінці інсталятор попереджає, що встановлення grub-установки не вдалося (тому що об'єм завантаження зашифрований), тож виберіть "продовжити без завантажувача".

  • Чистий обсяг завантаження

    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
    
  • криптовалюта

    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
    
  • Оновіть зображення 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
    
  • Налаштування завантажувача ( /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'.]
    

Чи я помилявся перед цим? Як я можу продовжувати правильно налаштовувати та встановлювати grub?


Мені погано, що після того, як ви змусили вас перенести Q на "правильний" сайт, ніхто не допоміг. Я не робив такого рівня роботи в Ubuntu. Але я шукав у google grub+ ваш заголовок. Я припускаю, що ви знайшли процедуру шифрування на веб- сторінці pavelkogan.com/2014/05/23/luks-full-disk-encryption (який є першим пошуком Google у цій темі). якщо ні, можливо, це допоможе. Гарне питання! і удачі!
обстріл

Пару речей: 1. Ви згадуєте /bootяк місце кріплення для всього. Я сподіваюся, що це помилка. 2. Ви не монтували /devпід час хронування, але ви монтували devpts. Оо
муру

Ще одна помилка - вам здається, що ви використовуєте ті самі UUID в crypttab та fstab. fstab фактично повинен використовувати UUIDs / dev / mapper / накопичувачі.
Олександр Дубінський

1
перевірити цей посібник членом спільноти Ubuntu. Я використав це, і він працює дуже добре для мене.
капад

Відповіді:


13

Ви допустили деякі помилки, але головна проблема полягає в повсюдності та зграї. В основному, коли ви встановлюєте /зашифрований розділ і не створюєте для нього окремого розділу /boot, grub видає повідомлення про помилку на зразок:

Я знаю /boot, зашифровано. Вам потрібно встановити GRUB_ENABLE_CRYPTODISK=yв /etc/default/grub. Я не зроблю цього для вас, тому я зійду з ладу, і ваша установка припиниться.

Огляд процесу

  • Ми використовуємо режим EFI.
  • Встановлюємо в незашифрований /bootрозділ та зашифрований btrfs /за допомогою стандартного інсталятора.
  • Після завершення встановлення ми chrootробимо деякі важливі зміни конфігурації та знову встановлюємо grub до системного розділу EFI та заново створюємо initrd.

Детальні кроки

  • Завантажте диск з встановлення Ubuntu 16.04 (тестується з Xubuntu).
  • Підключіться до Інтернету та запустіть, sudo apt update && sudo apt upgradeщоб оновити компоненти інсталятора
  • Використовуйте fdisk, gpartedабо інший інструмент для створення 3-х розділів:
    • Таблиця розділів GPT
    • Розділ 200 Мб, який ми будемо використовувати для розділу системи EFI
    • Багатогігабайтний розділ, який ми згодом використовуватимемо як зашифрований розділ swap, але який буде функціонувати як наш тимчасовий незашифрований /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(NOT /dev/mapper/sda3_crypt).

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Відредагуйте /etc/fstabта видаліть рядок для /boot. Інші записи правильні.

  • Встановіть grub до системного розділу 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, перед grub-mkconfig / update-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 з користувацьким простором як у живій системі, так і під час 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
    
  • Ви повинні побачити grub з проханням ввести пароль. Тоді ви отримаєте меню завантаження. Вибравши Ubuntu, вам знову запитають пароль. Тоді ви будете у своїй системі. Детальніше про те, як Ubuntu використовує BTRFS .

  • TODO : Створіть зашифрований своп (підказка: він включає редагування crypttab, fstab та повторний запуск update-initrd).

  • TODO : Збережіть свій пароль, щоб вам було потрібно ввести його лише один раз у grub. Про це детально тут .

Модернізації

  • Кожен раз, коли ви встановлюєте нове ядро, слід запускати користувацьку grub-mkconfigкоманду.
  • Кожен раз, коли ви оновлюєте grub, слід запускати користувацьку grub-installкоманду.

Інші примітки

  • Заманливо створити один зашифрований том і розділити його, щоб створити розділ swap (і, можливо, інші), але це не працює. І grub-mkconfig, і update-initrd будуть погано поводитися. Однак я не пробував LVM.
  • Можливо, спокусити використовувати swapfile поверх btrfs , але це, мабуть, погана ідея через продуктивність.

Просто уточнюючи , що я думаю , ви вже знаєте (на ваш коментар): fstabі crypttabнасправді НЕ правильно в цьому питанні. crypttabповинні вказувати на uuidвихідні /dev/sdxYпристрої; fstabповинен вказувати на відкриті скріпні пристрої на /dev/mapper/label.
Хенді

Дякую, що ви зробили цю відповідь, це допомогло мені налаштувати це.
x13

Я фактично не вважаю жодним із справжніх FDE, оскільки інформація про розділи просочена. Справжній FDE надає всім секторам зашифровані дані (за винятком заголовка LUKS на початку, хоча це технічно не потрібно за допомогою окремого заголовка). Я FDE використовую LVM всередині LUKS, тому він, безумовно, працює і може бути приємніше, якщо згодом вам потрібно буде змінити розміри розділів / гучності. Ось старий допис у блозі про це в 12.04, але він повинен працювати в пізніших версіях.
crass

Крім того , використання файлу підкачки на BTRFS це безумовно погана ідея ...
тупе

У вашій grub-installінструкції у вас є --bootloader=ubuntuпараметр. Я не можу знайти цей аргумент ні в посібниках Ubuntu, ні в GNU . Чи можете ви пояснити, що це робить або де це задокументовано?
Самуель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.