Моя цель - я хочу иметь двойную загрузку Xubuntu / Ubuntu с подвохом - я хочу, чтобы диск был полностью зашифрован с помощью полного шифрования диска dm-crypt (поставляется в комплекте). Теперь я знаю, что из коробки установщик Ubuntu не собирается сделать это простым для меня, и, возможно, это не выполнимо, потому что я не уверен, что в конечном итоге смогу обмануть инструменты в создании двух разных конфигураций initrd для каждой корневой файловой системы .
Итак, вопросы:
Кто-нибудь делал это раньше, и есть ли простой способ, которым я скучаю по этому?
Учитывая ( 1) отрицательный ... а. Должен ли я создавать отдельные базовые зашифрованные тома для каждой установки (xubuntu / ubuntu) или я должен просто создать 1 зашифрованный том и отдельные разделы установки внутри него? Я склоняюсь к последнему, чтобы сделать процесс проще. Однако я не уверен, как загрузчик справится с этим.
б. Как только я получу первый заложенный, если я пойду с 1 зашифрованным томом, как мне расшифровать его и установить второй дистрибутив (и правильно обновить загрузчик, initrd и т. Д.)?
I спрашивал об аспектах безопасности в Exchange Stack Exchange.
Я недавно установил другую 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' ").
Примечание. Я ответил на вопрос в том виде, в котором он был задан, но вы, вероятно, хотите, чтобы это был мой последний абзац.
Вам потребуется установить с альтернативного CD для dmcrypt. Выберите разделение вручную в программе установки. Если вам нужны два отдельных зашифрованных тома, сделайте их первичными, расширенными или разделами EFI и оставьте достаточно места для другого тома при установке первой ОС. Если вам нужны два дистрибутива Linux с общим зашифрованным томом (но вы, вероятно, не хотите этого, как я объясню ниже), создайте один большой зашифрованный том и файловые системы для каждой ОС при установке этой ОС.
Сделайте зашифрованный том физическим томом LVM и создайте группу томов, которая охватывает только этот физический том. Если две операционные системы совместно используют зашифрованный том, они также будут совместно использовать группу томов: группы томов являются способом управления несколькими томами, и в этой конфигурации есть только один. Создайте хотя бы один логический том для каждой корневой файловой системы. Если две ОС совместно используют зашифрованный том, и вы не хотите использовать спящий режим, они могут совместно использовать область подкачки.
Оставьте достаточно большую область загрузки, которая должна быть в незашифрованном виде. Я рекомендую по крайней мере 1 ГБ (позволяет хранить аварийный компакт-диск в чрезвычайной ситуации), если только вы не сильно ограничены дисковым пространством, но 200 МБ достаточно только для одного ядра и одного альтернативного ядра.
Наличие двух отдельных загрузочных разделов - самый простой способ установки. Пусть один дистрибутив управляет загрузочным сектором и устанавливает загрузчик вторичного дистрибутива в первый сектор своего загрузочного раздела. Загрузите загрузчик вторичного дистрибутива из основного загрузчика.
Если вам нужен один загрузочный раздел, установите Grub только в одной операционной системе и поделитесь /boot
между двумя операционными системами.
Двойная загрузка является болезненной для использования и не нужна в большинстве ситуаций. Если вы хотите запустить две операционные системы, используйте некоторую форму виртуализации. Единственный вариант использования, который я могу придумать для двойной загрузки, - это когда вам нужно протестировать несколько операционных систем на одном и том же дорогом оборудовании (даже тогда, если вы можете себе это позволить, удобнее иметь отдельные машины на одну ОС).
Вам понадобится двойная загрузка, если вам нужны две отдельные установки Linux с разными паролями. Даже тогда вы вполне можете реализовать желаемую политику безопасности, создав отдельные учетные записи или создав отдельные виртуальные контейнеры, каждый со своими корневыми пользователями.
Для запуска Linux в Linux вам может даже не потребоваться виртуализация: вы можете запускать программы из другой установки с chroot . С Ubuntu или другим дистрибутивом на основе Debian в качестве основной ОС, schroot делает это очень легко. Если вы используете schroot с другим вторичным дистрибутивом, вам, вероятно, потребуется установить его отдельно, поэтому на отдельном томе. Если вторичный дистрибутив основан на Debian и вам не нужно загружать его, вы можете установить его в подкаталог с помощью debootstrap . См. Мое руководство по schroot .
Если вы хотите попробовать Ubuntu и Xubuntu, вам не нужен весь этот ригмарол. Xubuntu и Ubuntu - это один и тот же дистрибутив с разными пакетами по умолчанию. Установите Ubuntu из любого варианта и убедитесь, что установлены оба пакета ubuntu-desktop и xubuntu-desktop . Выберите предпочитаемую среду при входе в систему, и вы будете использовать Ubuntu / Unity или Ubuntu или Ubuntu / XFCE или Xubuntu.
Вот полный отчет.
Я сгруппировал шаги по этапам между перезагрузками:
Я сделал это на ноутбуке с 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) в месте, в котором они легко доступны. Это не понадобится, если все пойдет по плану, но может помочь вам сохранять спокойствие.
Откройте контейнер 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
Добавить новый корневой том. Размер зависит от вас, чтобы выбрать; 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
Запустите установщик и выберите «Что-то еще» в качестве типа установки.
Перейдите к остальной части установки.
В конце установки выберите продолжить тестирование.
Смонтируйте оба корневых тома.
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
Приведите в порядок (не на 100% необходимо, особенно если вы не выбрали постоянство при создании живого USB).
umount /mnt/oldroot && rmdir /mnt/oldroot
umount /mnt/newroot && rmdir /mnt/newroot
Вы также можете попытаться привести в порядок, закрыв контейнер LUKS, но если вам пришлось свернуть окно установщика, вы получите сообщение об ошибке «Устройство или ресурс занят». Не волнуйтесь, он все равно будет закрыт при отключении.
cryptsetup luksClose sda5_crypt
Отредактируйте файл / etc / default / grub, чтобы включить шифрование / загрузку:
GRUB_ENABLE_CRYPTODISK=y
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda5:sda5_crypt"
Затем обновите grub - главным образом, чтобы добавить в меню только что установленную Ubuntu, но также и для измененных настроек.
update-grub
Когда вы выбираете вторичную Ubuntu из меню Grub, вам будет предложено ввести пароль для открытия контейнера LUKS. И тогда вас снова попросят ввести тот же пароль. После того, как вы вошли в систему, нам нужно решить проблему с необходимостью ввода пароля дважды. Мы делаем это, добавляя ключевой файл в контейнер LUKS.
Во-первых, мы хотим знать, сколько ключей уже имеется в контейнере LUKS. Контейнер LUKS может иметь до восьми ключей (пронумерованных 0..7), поэтому мы хотим создавать только те ключи, которые нам действительно нужны.
cryptsetup luksDump /dev/sda5
Далее мы создаем новый ключевой файл.
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
На этот раз, когда вы выбираете вторичную 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. Напоминания для будущих установокЕсли вы решите разделить незашифрованный основной раздел, чтобы освободить место для нового / boot, вы можете пропустить некоторые из представленных мною шагов: