Двойная установка Ubuntu с шифрованием всего диска

Моя цель - я хочу иметь двойную загрузку Xubuntu / Ubuntu с подвохом - я хочу, чтобы диск был полностью зашифрован с помощью полного шифрования диска dm-crypt (поставляется в комплекте). Теперь я знаю, что из коробки установщик Ubuntu не собирается сделать это простым для меня, и, возможно, это не выполнимо, потому что я не уверен, что в конечном итоге смогу обмануть инструменты в создании двух разных конфигураций initrd для каждой корневой файловой системы .

Итак, вопросы:

  1. Кто-нибудь делал это раньше, и есть ли простой способ, которым я скучаю по этому?

  2. Учитывая ( 1) отрицательный ... а. Должен ли я создавать отдельные базовые зашифрованные тома для каждой установки (xubuntu / ubuntu) или я должен просто создать 1 зашифрованный том и отдельные разделы установки внутри него? Я склоняюсь к последнему, чтобы сделать процесс проще. Однако я не уверен, как загрузчик справится с этим.

б. Как только я получу первый заложенный, если я пойду с 1 зашифрованным томом, как мне расшифровать его и установить второй дистрибутив (и правильно обновить загрузчик, initrd и т. Д.)?

I спрашивал об аспектах безопасности в Exchange Stack Exchange.

2
задан 17 March 2017 в 16:14

3 ответа

Я недавно установил другую Ubuntu наряду с зашифрованной Ubuntu, которую я уже имел на своем компьютере. В большинстве случаев я следовал инструкциям из «Установка нескольких дистрибутивов Linux на блоге LUKS Encrypted Harddrive ».

Тем не менее, я хотел сохранить существующую установку без изменений, но поскольку изменение размера существующего контейнера LUKS для меня слишком сложно, и поскольку я не хотел перераспределять весь диск, я закончил тем, что реорганизовал вместо этого Объемы LVM внутри существующего контейнера LUKS, используя live-USB. Это решение заставило меня немного отклониться от инструкций, так как мне пришлось поместить папку new / boot в контейнер LUKS. Оказалось, что все оказалось проще, чем ожидалось.

Итак, по-прежнему подключившись к live-USB, я запустил установщик и выбрал разметку вручную. Я указал «/» на новый логический том и позволил установщику поместить новый / boot в контейнер LUKS, не указывая его нигде. Я также указал swap на новый логический том, хотя я не уверен, что Hibernate работает с LUKS. Для установки grub я выбрал цель, в которой установка не удалась. В конце я решил «продолжить тестирование» , а сразу после этого продолжить без установки grub.

Перед перезагрузкой после установки я скопировал / etc / crypttab с корневого тома первого Ubuntu на новый корневой том и запустил update-initramfs -u с помощью chroot. Это решающий шаг.

После перезагрузки я вошел в первую Ubuntu, отредактировал / etc / default / grub, чтобы добавить GRUB_ENABLE_CRYPTODISK = y и изменить GRUB_CMDLINE_LINUX, чтобы он содержал «cryptdevice = / dev / sda5: sda5_crypt», запустил update-grub и перезагрузился. 116]

После перезагрузки, после того, как я запустил и запустил новую установку, я добавил файл ключа, чтобы избежать необходимости дважды вводить пароль LUKS при запуске (потому что / boot теперь зашифрован). Чтобы добавить ключевой файл, я следовал почти одинаковым инструкциям из нескольких источников. Я считаю запись в блоге Павла Когана "Linux Mint encryption" должна быть первоисточником.

Все оказалось намного проще, чем я ожидал, хотя мне пришлось преодолеть некоторые идиотские препятствия на их пути (например, ошибка «Значение GRUB_ENABLE_CRYPTODISK: util / grub-install.c инструктирует« 1 »). но util / config.c ожидает 'y' ").

0
ответ дан 17 March 2017 в 16:14

Примечание. Я ответил на вопрос в том виде, в котором он был задан, но вы, вероятно, хотите, чтобы это был мой последний абзац.

Ручное создание разделов и конфигурации с двойной загрузкой

Вам потребуется установить с альтернативного CD для dmcrypt. Выберите разделение вручную в программе установки. Если вам нужны два отдельных зашифрованных тома, сделайте их первичными, расширенными или разделами EFI и оставьте достаточно места для другого тома при установке первой ОС. Если вам нужны два дистрибутива Linux с общим зашифрованным томом (но вы, вероятно, не хотите этого, как я объясню ниже), создайте один большой зашифрованный том и файловые системы для каждой ОС при установке этой ОС.

Сделайте зашифрованный том физическим томом LVM и создайте группу томов, которая охватывает только этот физический том. Если две операционные системы совместно используют зашифрованный том, они также будут совместно использовать группу томов: группы томов являются способом управления несколькими томами, и в этой конфигурации есть только один. Создайте хотя бы один логический том для каждой корневой файловой системы. Если две ОС совместно используют зашифрованный том, и вы не хотите использовать спящий режим, они могут совместно использовать область подкачки.

Оставьте достаточно большую область загрузки, которая должна быть в незашифрованном виде. Я рекомендую по крайней мере 1 ГБ (позволяет хранить аварийный компакт-диск в чрезвычайной ситуации), если только вы не сильно ограничены дисковым пространством, но 200 МБ достаточно только для одного ядра и одного альтернативного ядра.

Наличие двух отдельных загрузочных разделов - самый простой способ установки. Пусть один дистрибутив управляет загрузочным сектором и устанавливает загрузчик вторичного дистрибутива в первый сектор своего загрузочного раздела. Загрузите загрузчик вторичного дистрибутива из основного загрузчика.

Если вам нужен один загрузочный раздел, установите Grub только в одной операционной системе и поделитесь /boot между двумя операционными системами.

Установка двух дистрибутивов Linux

Двойная загрузка является болезненной для использования и не нужна в большинстве ситуаций. Если вы хотите запустить две операционные системы, используйте некоторую форму виртуализации. Единственный вариант использования, который я могу придумать для двойной загрузки, - это когда вам нужно протестировать несколько операционных систем на одном и том же дорогом оборудовании (даже тогда, если вы можете себе это позволить, удобнее иметь отдельные машины на одну ОС).

Вам понадобится двойная загрузка, если вам нужны две отдельные установки Linux с разными паролями. Даже тогда вы вполне можете реализовать желаемую политику безопасности, создав отдельные учетные записи или создав отдельные виртуальные контейнеры, каждый со своими корневыми пользователями.

Для запуска Linux в Linux вам может даже не потребоваться виртуализация: вы можете запускать программы из другой установки с chroot . С Ubuntu или другим дистрибутивом на основе Debian в качестве основной ОС, schroot делает это очень легко. Если вы используете schroot с другим вторичным дистрибутивом, вам, вероятно, потребуется установить его отдельно, поэтому на отдельном томе. Если вторичный дистрибутив основан на Debian и вам не нужно загружать его, вы можете установить его в подкаталог с помощью debootstrap . См. Мое руководство по schroot .

Двойная установка Ubuntu / Xubuntu

Если вы хотите попробовать Ubuntu и Xubuntu, вам не нужен весь этот ригмарол. Xubuntu и Ubuntu - это один и тот же дистрибутив с разными пакетами по умолчанию. Установите Ubuntu из любого варианта и убедитесь, что установлены оба пакета ubuntu-desktop и xubuntu-desktop . Выберите предпочитаемую среду при входе в систему, и вы будете использовать Ubuntu / Unity или Ubuntu или Ubuntu / XFCE или Xubuntu.

0
ответ дан 17 March 2017 в 16:14

Вот полный отчет.

Я сгруппировал шаги по этапам между перезагрузками:

  1. Предварительные сведения
  2. Резервное копирование ваших данных
  3. Перезагрузка на live-USB для основных задач a. предварительная установка: освободить место на диске b. установка: сделать ручное разбиение c. после установки: дополнение initramfs
  4. Перезагрузите основной Ubuntu для обновления grub
  5. Перезагрузите дополнительный Ubuntu, чтобы добавить ключевой файл
  6. Перезагрузите дополнительный Ubuntu для завершения касания
  7. Напоминания для будущих установок
  8. О незашифрованном / boot

0. Предварительные сведения

Я сделал это на ноутбуке с BIOS (подробности UEFI см. В Полное шифрование диска Ubuntu с encrypted / boot ) и уже установлен зашифрованный Ubuntu 15.10 (но он может быть ну будет 14.04 LTS). Я повторил процедуру установки Ubuntu 16.10 более ранней версии 16.04, а затем установил 18.04 более ранней версии 16.10. Однако мне пришлось стереть содержимое логического тома, который я использовал для root (/) для установки Bionic. Всякий раз, когда я оставлял его без изменений, либо Ubiquity, либо update-initramfs терпели неудачу разными способами.

Я буду ссылаться на разделы и тома LVM по именам, которые были созданы стандартной установкой Ubuntu на жестком диске / dev / sda:

$ lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINT
NAME                    TYPE  FSTYPE      MOUNTPOINT
sda                     disk              
├─sda1                  part  ext2        /boot
├─sda2                  part              
└─sda5                  part  crypto_LUKS 
  └─sda5_crypt          crypt LVM2_member 
    ├─ubuntu--vg-root   lvm   ext4        /
    └─ubuntu--vg-swap_1 lvm   swap        [SWAP]

Контейнер LUKS "sda5_crypt" занимает все пространство на логическом разделе. Сократить контейнер LUKS для меня слишком сложно; Я не хочу разрушать существующую установку Ubuntu, пытаясь это сделать. Поэтому вместо этого я решил уменьшить логический том «root» , чтобы освободить место для новых установок.

Таким образом, единственным незашифрованным пространством на диске является раздел 255M / boot. Можно было бы разделить этот раздел, но две равные половины содержали бы только две версии ядра в каждой, и для меня этого недостаточно. Поэтому вместо этого я решил поместить новый каталог / boot в новый / root (не указав его в каком-либо другом месте). Это создает некоторые дополнительные сложности, но также оставляет место для нескольких установок вместе с основной Ubuntu.

Все приведенные ниже команды должны выполняться с правами sudo , поэтому я пропустил часть sudo из всех командных строк.

Кроме того, я буду говорить о «вторичной Ubuntu», потому что я не могу знать, какой Linux вы хотите установить. Замените «вторичный Ubuntu» (и любые детали, относящиеся к Ubiquity) на ваш выбор аромата.

[Тысяча сто двадцать семь] 1. Резервное копирование ваших данных

В дополнение к обычным резервным копиям вы можете также создать отдельную копию основных параметров (таких как / etc / crypttab) в месте, в котором они легко доступны. Это не понадобится, если все пойдет по плану, но может помочь вам сохранять спокойствие.

2. Перезагрузитесь к live-USB для основных задач

2.a. перед установкой: освободите место на диске

Откройте контейнер LUKS и активируйте LVM.

cryptsetup luksOpen /dev/sda5 sda5_crypt
vgscan
vgchange -ay

Сократить существующий корневой том.

e2fsck -f /dev/mapper/ubuntu--vg-root
#resize2fs -p /dev/mapper/ubuntu--vg-root 16G
lvreduce -L 16G --resizefs /dev/ubuntu-vg/root
  • Закомментированная строка есть на тот случай, если вы не доверяете «lvreduce --resizefs» для надежного выполнения бита изменения размера. Запустите «resize2fs», если вам от этого станет лучше.

Добавить новый корневой том. Размер зависит от вас, чтобы выбрать; 16G - только пример.

lvcreate -L 16G -n root2 ubuntu-vg

Создавайте новый своп только в том случае, если считаете, что вы можете получить спящий режим для работы с LUKS. В противном случае, пусть две установки совместно используют существующее пространство подкачки.

lvcreate -L 4G -n swap2 ubuntu-vg

Создание нового тома данных кажется очевидной вещью, но это не обязательно для установки, как описано здесь.

lvcreate -l 100%FREE -n data ubuntu-vg

На этом этапе новичку может понадобиться перезагрузиться без live-USB и войти в основной Ubuntu, чтобы убедиться, что он все еще работает. Если вы это сделаете, не забудьте снова открыть контейнер LUKS при перезагрузке обратно на live-USB.

Кроме того, будьте осторожны, используя правильную команду, чтобы открыть контейнер LUKS . Например, если вы щелкнете по значку, который вы видите на боковой панели Launcher, контейнер будет открыт с неверным именем, что в дальнейшем приведет к тому, что update-initramfs не сможет выполнить свою работу.

cryptsetup luksOpen /dev/sda5 sda5_crypt

2.b. установка: выполните ручное разбиение

Запустите установщик и выберите «Что-то еще» в качестве типа установки.

  • Укажите / на свой новый корневой том (/dev/ubuntu-vg/root2).
  • Не указывайте / загружайте нигде.
  • Укажите своп на новый том подкачки, если вы его создали, а в противном случае - на старый.
  • Тщательно убедитесь, что никакой другой раздел или том LVM не участвует в установке.
  • Поместите grub на логический том. Неважно, какой том, так как суть в гарантирует, что gub-install завершится неудачно . В первый раз, это самый безопасный вариант. Позже, когда вы сделали это много раз, вы будете точно знать, когда выбрать /dev/sda.
  • .

Перейдите к остальной части установки.

  • Если установщик спрашивает, нужно ли отключать монтирование, вы сделали что-то, что не упомянуто здесь. Размонтируйте ваши дополнительные крепления.

В конце установки выберите продолжить тестирование.

  • Когда установщик сообщает, что установка grub не удалась, выберите продолжить без grub.
  • Если всплывающее окно застревает, просто сверните окно установщика.

2.c. после установки: дополнение initramfs

Смонтируйте оба корневых тома.

mkdir /mnt/newroot && mount /dev/mapper/ubuntu--vg-root2 /mnt/newroot
mkdir /mnt/oldroot && mount /dev/mapper/ubuntu--vg-root /mnt/oldroot

Скопируйте файл / etc / crypttab из старого корневого тома в новый.

cp -p /mnt/oldroot/etc/crypttab /mnt/newroot/etc/
cat /mnt/newroot/etc/crypttab

Если файл, который вы скопировали, уже ссылается на файл ключа, скопируйте также файл ключа и сценарий, который необходим для загрузки ключа в initrd.img.

cp -p /mnt/oldroot/crypto_keyfile.bin /mnt/newroot/
cp -p /mnt/oldroot/etc/initramfs-tools/hooks/crypto_keyfile /mnt/newroot/etc/initramfs-tools/hooks/
  • В первый раз ключ еще не существует, и его лучше создать на более позднем этапе, потому что устранение неполадок легче, когда не все изменения сделаны сразу.

Критическим последним шагом является загрузка изменений в initrd.img в тюрьме chroot.

for DEV in dev dev/pts sys proc; do mount --bind /$DEV /mnt/newroot/$DEV; done

chroot /mnt/newroot update-initramfs -u

# Note reverse order.
for DEV in proc sys dev/pts dev; do umount /mnt/newroot/$DEV; done
  • Если вы получили сообщение об ошибке «cryptsetup: WARNING: неверная строка в / etc / crypttab», вы не открыли контейнер LUKS по правильному имени.

Приведите в порядок (не на 100% необходимо, особенно если вы не выбрали постоянство при создании живого USB).

umount /mnt/oldroot && rmdir /mnt/oldroot
umount /mnt/newroot && rmdir /mnt/newroot

Вы также можете попытаться привести в порядок, закрыв контейнер LUKS, но если вам пришлось свернуть окно установщика, вы получите сообщение об ошибке «Устройство или ресурс занят». Не волнуйтесь, он все равно будет закрыт при отключении.

cryptsetup luksClose sda5_crypt
  • Самая трудная часть теперь закончена.

3. Перезагрузите основной Ubuntu, чтобы обновить grub

Отредактируйте файл / etc / default / grub, чтобы включить шифрование / загрузку:

GRUB_ENABLE_CRYPTODISK=y
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda5:sda5_crypt"
  • Если вы установите значение GRUB_ENABLE_CRYPTODISK в «true» или «1» или что-то еще, update-grub будет жаловаться, что значение должно быть «1», но на самом деле это должно быть «y». Это известная ошибка.
  • Как обычно, будьте осторожны, чтобы не добавлять новую строку в конец файла.

Затем обновите grub - главным образом, чтобы добавить в меню только что установленную Ubuntu, но также и для измененных настроек.

update-grub

4. Перезагрузите вторичную Ubuntu, чтобы добавить ключевой файл

Когда вы выбираете вторичную Ubuntu из меню Grub, вам будет предложено ввести пароль для открытия контейнера LUKS. И тогда вас снова попросят ввести тот же пароль. После того, как вы вошли в систему, нам нужно решить проблему с необходимостью ввода пароля дважды. Мы делаем это, добавляя ключевой файл в контейнер LUKS.

Во-первых, мы хотим знать, сколько ключей уже имеется в контейнере LUKS. Контейнер LUKS может иметь до восьми ключей (пронумерованных 0..7), поэтому мы хотим создавать только те ключи, которые нам действительно нужны.

cryptsetup luksDump /dev/sda5
  • В Wily Werewolf у контейнера уже есть три ключа. Понятия не имею почему.

Далее мы создаем новый ключевой файл.

dd bs=512 count=4 if=/dev/urandom of=/crypto_keyfile.bin
chmod a=,u+r /crypto_keyfile.bin

Затем мы добавляем новый ключ в контейнер. Команда будет соответствовать существующему паролю, поэтому введите тот, который вам известен.

cryptsetup luksAddKey /dev/sda5 /crypto_keyfile.bin

Нам все еще нужен скрипт, который запускает update-initramfs для загрузки ключа в initrd.img. Поместите файл в / etc / initramfs-tools / hooks / и установите его защиту.

chmod +x /etc/initramfs-tools/hooks/crypto_keyfile

В скрипте должна быть только одна строка:

cp /crypto_keyfile.bin "${DESTDIR}"
  • имя скрипта, а также имя ключевого файла, решать вам.

Мы также должны добавить ссылку на ключ в / etc / crypttab. Перед модификацией это выглядит так:

sda5_crypt UUID=sda5-uuid-here none luks,discard

После модификации это должно выглядеть так:

sda5_crypt UUID=sda5-uuid-here /crypto_keyfile.bin luks,discard,keyscript=/bin/cat

Теперь мы наконец готовы обновить initramfs:

update-initramfs -u

5. Перезагрузите вторичную Ubuntu для завершения касания

На этот раз, когда вы выбираете вторичную Ubuntu из меню grub, вам нужно будет ввести пароль LUKS только один раз.

Скопируйте файл ключа на старый корневой том для резервного копирования.

mkdir /mnt/oldroot
mount /dev/mapper/ububtu--vg-root /mnt/oldroot
cp /crypto_file /mnt/oldroot/

Скопируйте также настройки grub для резервного копирования (со старого корневого тома на новый). Поскольку меню grub является общим для обеих установок, его настройки одинаковы для обоих, и меню можно установить с помощью любой установки. Поэтому, даже если вы пока предпочитаете держать основной Ubuntu в верхней части меню, вам может понадобиться резервная копия настроек позже.

cp /mnt/oldroot/etc/default/grub /etc/default/
umount /mnt/oldroot
rmdir /mnt/oldroot

Вы также можете изменить параметры монтирования логических томов (в основном корневых томов), чтобы две установки не отображали приватные части друг друга в графическом интерфейсе. Я мог бы дать вам образец для / etc / fstab, но, к счастью, Диски делают такую ​​достойную работу, что мне не нужно.

Наконец, вы можете начать обычное развертывание вторичной Ubuntu, а также развернуть новый том данных в обеих установках.

[+1135] 6. Напоминания для будущих установок

  • При перезаписи любой из установок Ubuntu вы должны всегда повторять одни и те же шаги после установки, за исключением создания нового файла ключей для LUKS.
  • Необходимость файла ключей может исчезнуть в любом будущем выпуске. На самом деле, я не нашел надлежащей документации для части установки cryptsetup, поэтому боюсь, что-нибудь об этом может измениться. Осторожно!

7. О незашифрованном / boot

Если вы решите разделить незашифрованный основной раздел, чтобы освободить место для нового / boot, вы можете пропустить некоторые из представленных мною шагов:

  • Вы делаете не нужен ключевой файл, поэтому вам также не нужен скрипт для загрузки ключа в initrd.img, и вам не нужно добавлять ссылку на ключевой файл в / etc / crypttab. Тем не менее, вам все равно нужно добавить файл / etc / crypttab и запустить update-initramfs в chroot jail на этапе после установки.
  • Если новый / boot не зашифрован, вам также не нужен GRUB_ENABLE_CRYPTODISK в настройках grub, и вам не нужно устанавливать параметры запуска GRUB_CMDLINE_LINUX. Тем не менее, вам все равно нужно запустить update-grub, чтобы добавить вторичную установку в меню grub.
0
ответ дан 17 March 2017 в 16:14

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

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