Полное шифрование диска Ubuntu с зашифрованной начальной загрузкой /

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

Я запишу процедуру, я следовал Ubuntu 15.04 Живая сессия 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 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
    
  • Открытый 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
    
  • Установка (использующий повсеместность)

    • загрузчик на/dev/sda
    • /dev/sda1 - используют в качестве ext2 - точка монтирования / начальная загрузка
    • /dev/sda2 - используют в качестве ext2 - точка монтирования / начальная загрузка
    • /dev/sda3 - используют в качестве ext2 - точка монтирования / начальная загрузка
    • /dev/sda4 - используют в качестве ext2 - точка монтирования / начальная загрузка

    В конце установщик предупреждает, что установка личинки перестала работать (потому что загрузочный том шифруется), поэтому выберите 'continue without 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
    
  • Обновите изображение 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'.]
    

Я делал ошибку перед этим? Как я могу продолжить настраивать и устанавливать личинку правильно?

14
задан 15 May 2016 в 12:27

1 ответ

Вы сделали некоторые ошибки, но основная проблема находится в повсеместности и личинке. В основном, когда Вы устанавливаете / быть зашифрованным разделом и не создавать отдельный раздел для /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
    • Раздел 200 МБ, который мы будем использовать для Системного Раздела EFI
    • Раздел мультигигабайта, который мы будем в конечном счете использовать в качестве нашего зашифрованного раздела подкачки, но который будет функционировать как наш незашифрованный временный файл /boot
    • Зашифрованный раздел, который использует остальную часть пространства
  • Подготовьте зашифрованный раздел

    sudo cryptsetup luksFormat /dev/sda3
    sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
    sudo mkfs.btrfs /dev/mapper/sda3_crypt
    
  • Установка Ubuntu

    • Выберите "Something else", когда Вас спрашивают о типе установки.
    • Настроить /dev/sda1 как EFI System Partition
    • Настроить /dev/sda2 как ext2, отформатированный, с точкой монтирования /boot
    • Настроить /dev/mapper/sda3_crypt как btrfs с точкой монтирования /
    • Продолжите установку.
    • После того, как это закончится, примите решение остаться в живой системе (никакая перезагрузка).
  • Скопируйте содержание /boot и сделайте a 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 двоичный файл. Если эти вещи отсутствуют, это - потому что личинка-mkconfig и/или обновление-initrd не могли выяснить, как объемы, которые Вы смонтировали или указали в fstab, касаются зашифрованного тома в crypttab. (Существует большая волшебная автоматическая конфигурация, которую они делают.) Это может произойти, если Вы отличаетесь от этого руководства, например, с помощью ZFS или путем попытки разделить sda3_crypt.

  • (При использовании ZFS вместо btrfs), личинка-mkconfig и обновление-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 partiion (как установка zfs пространство пользователя 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 Вас попросят Вашего пароля снова. Затем Вы будете в своей системе. Читайте больше о том, как Ubuntu использует BTRFS.

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

  • TODO: Сохраните свой пароль, таким образом, только необходимо ввести его однажды в личинку. Это детализировано в: http://webcache.googleusercontent.com/search?q=cache:z2MwHuPWTakJ:missinglink.xyz/security/tutorial-debianubuntu-full-disk-encryption-luks-fde-including-encrypted-boot/improved-full-disk-encryption-add-luks-key-file-initrdinitramfs/+&cd=1&hl=en&ct=clnk&gl=us

Обновления

  • Каждый раз, когда Вы устанавливаете новое ядро, необходимо выполнить пользовательское grub-mkconfig команда.
  • Каждый раз, когда Вы обновляете личинку, необходимо выполнить пользовательское grub-installкоманда.

Другие примечания

  • Заманчиво создать единственный зашифрованный том и разделить его для создания раздела подкачки (и возможно другие), но это не работает. Обе личинки-mkconfig и обновление-initrd будут неправильно себя вести. Однако я не попробовал LVM.
  • Может быть заманчиво использовать своп-файл сверху btrfs, но это - вероятно, плохая идея из-за производительности.
12
ответ дан 23 November 2019 в 03:05

Другие вопросы по тегам:

Похожие вопросы: