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.5GB #boot
      • / dev / sda2 linux-swap 4GB #swap
      • / dev / sda3 ext4 15 ГБ # root
      • / 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
    
  • Открыть криптовалюту

    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 - точка монтирования / boot
    • / dev / sda2 - использовать как ext2 - точка монтирования / boot
    • / dev / sda3 - использовать как ext2 - точка монтирования / boot
    • / dev / sda4 - использовать как ext2 - точка монтирования / boot

    В конце установщик предупреждает, что установка 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
    
  • 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'.]
    

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


Мне жаль, что после того, как вы заставили вас переместить свой вопрос на «правильный» сайт, никто не помог. Я не делал этот уровень работы в Ubuntu. Но я посмотрел на Google grub+ ваш заголовок. Я полагаю, вы нашли свою процедуру шифрования на pavelkogan.com/2014/05/23/luks-full-disk-encryption (это первый поиск в Google по этой теме). если нет, может быть, это поможет. Хороший вопрос! и удачи!
Оболочка

Пара вещей: 1. Вы упоминаете /bootкак точку монтирования для всего. Я надеюсь, что это опечатка. 2. Вы не монтировали /devво время chroot, но вы монтировали devpts. Оо
Муру

Другая ошибка заключается в том, что вы используете одинаковые UUID в crypttab и fstab. fstab должен использовать UUID / 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
    • Раздел на несколько гигабайт, который мы в конечном итоге будем использовать в качестве зашифрованного раздела подкачки, но который будет функционировать как наш временный незашифрованный /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 blkidUUID /dev/sda3(НЕ /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, до личинка-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 userspace как в действующей системе, так и во время 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команду.

Другие заметки

  • Соблазнительно создать один зашифрованный том и разделить его для создания раздела подкачки (и, возможно, других), но это не работает. И grub-mkconfig, и update-initrd будут работать неправильно. Тем не менее, я не пробовал LVM.
  • Может быть заманчиво использовать файл подкачки поверх btrfs , но это, вероятно, плохая идея из-за производительности.

Просто уточняю, что, я думаю, вы уже знаете (согласно вашему комментарию): fstabи crypttabна самом деле не правы в этом вопросе. crypttabдолжен указывать на uuidнеобработанные /dev/sdxYустройства; fstabдолжен указывать на открытые устройства шифрования в /dev/mapper/label.
Hendy

Спасибо за ответ, он помог мне настроить это.
x13

На самом деле я не рассматриваю ни одного из этих истинных FDE, поскольку утечка информации о разделах. В истинном FDE все сектора должны быть зашифрованными данными (за исключением заголовка LUKS в начале, хотя это технически не требуется при использовании отдельного заголовка). Я делаю FDE, используя LVM внутри LUKS, так что он определенно работает и может быть лучше, если вам понадобится изменить размер раздела / тома позже. Вот старая запись в блоге о том, как сделать это в 12.04, но она должна работать в более поздних версиях.
грубый

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

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