LINUX.ORG.RU
ФорумAdmin

Full disk encryption

 , ,


0

1

OpenRC.

На флешке незашифрованный /efi (/dev/sda1) и зашифрованный /boot (/dev/sda2). На SSD зашифрованный корневой раздел (/dev/nvme0n1p1).

/etc/default/grub:

GRUB_ENABLE_CRYPTODISK=y
...
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<ююид /dev/nvme0n1p1>:cryptroot root=/dev/mapper/cryptroot"

/etc/dracut.conf.d/luks.conf:

add_dracutmodules+=" crypt dm rootfs-block "
kernel_cmdline+=" rd.luks.name=<ююид /dev/sda2>=cryptboot rd.luks.name=<ююид /dev/nvme0n1p1>=cryptroot root=/dev/mapper/cryptroot "

/etc/fstab:

UUID=<ююид /dev/sda1> /efi vfat nosuid,nodev,noexec,noauto,noatime,umask=0077 0 2

UUID=<ююид /dev/mapper/cryptboot> /boot ext4 nosuid,nodev,noexec,noauto,noatime 0 2

UUID=<ююид /dev/mapper/cryptroot> / ext4 lazytime,errors=remount-ro 0 1

Ядро gentoo-kernel-bin. Initramfs, как вы поняли, сгенерирована dracut.

  • Включаю ПК
  • GRUB просит пароль от /dev/sda2
  • Ввожу пароль
  • Вижу GRUB меню
  • Нажимаю Return
  • Вижу dracut
  • dracut: luksOpen /dev/nvme0n1p1 cryptroot
  • Ввожу пароль
  • Ничего не предвещает беды
  • Внезапно! dracut: luksOpen /dev/sda2 luks-<ююид /dev/sda2>
  • Думаю. Жду
  • Попадаю в debug меню с ошибкой "бла-бла-бла Could not boot бла-бла-бла device /dev/mapper/cryptboot does not exist"
  • Ввожу cryptsetup close /dev/mapper/luks-<ююид /dev/sda2>
  • Потом cryptsetup open /dev/sda2 cryptboot
  • Потом exit
  • Загрузка успешно продолжается
  • Ввожу имя пользователя и пароль
  • Успешно вхожу в систему

Вопросы:

  1. Почему dracut требует снова расшифровать /dev/sda2, если GRUB уже должен был его расшифровать? Предполагаю, потому что в /etc/fstab есть строка UUID=<ююид /dev/mapper/cryptboot /boot ..., но не уверен.
  2. Где нужно указать, под каким именем откроется /dev/sda2 (/dev/mapper/cryptboot)? Как видно выше, я попробовал добавить строку rd.luks.name=<ююид /dev/sda2>=cryptboot в /etc/dracut.conf.d/luks.conf, но это не помогло.
  3. А вообще, откуда взялось имя /dev/mapper/cryptboot? Да, при установке системы я вводил команду cryptsetup open /dev/sda2 cryptboot, но ни в каких файлах это имя не указано(?). Или GRUB и dracut автоматически находят, под какими именами открыты LUKS разделы и используют эти имена при установке(?)?
  4. Вроде всё?
  5. Заранее спасибо

Почему dracut требует снова расшифровать /dev/sda2, если GRUB уже должен был его расшифровать?

Потому что GRUB это не Linux. Всё, что он там делает до запуска ядра, последнего не касается. Если не хочешь повторно вводить пароль, используй ключ на ранее расшифрованном томе.

А вообще, откуда взялось имя /dev/mapper/cryptboot?

rd.luks.name=<ююид /dev/sda2>=cryptboot

Даже не знаю.

Или GRUB и dracut автоматически находят, под какими именами открыты LUKS разделы и используют эти имена при установке(?)?

GRUB про это ничего не знает, он оперирует UUID или своими собственными именами блочных устройств.

anonymous
()
Ответ на: комментарий от anonymous

Даже не знаю

Ещё раз, добавление этой строки никак не повлияло на загрузку. Как просили /dev/mapper/cryptboot, так и просят

Ты на главный вопрос не ответил. На второй

rybakov
() автор топика
Ответ на: комментарий от rybakov

Ты на главный вопрос не ответил. На второй

Думаю, что в /etc/crypttab. initrd при этом надо собирать с hostonly. Потом в собранном уже можно посмотреть детали. Кажется, всё будет в командной строке. Есть же документация, в конце концов.

У меня crypttab работал, но я не использовал в точности эту схему с зашифрованным /boot.

anonymous
()
Ответ на: комментарий от anonymous

Добавил в /etc/crypttab:

cryptboot UUID=... none luks
cryptroot UUID=... none luks

В /etc/default.conf.d/luks.conf закомментировал строку kernel_cmdline+=" ... и добавил install_items+=" /etc/crypttab "

Помогло, теперь dracut открывает /dev/sda2 с правильным именем (dracut: luksOpen /dev/sda2 cryptboot none luks)

Initrd при этом надо собирать с hostonly

Он уже собирался с hostonly, но почему это необходимо?

Есть же документация

Буду благодарен, если ты укажешь, где именно в документации об этом написано

Спасибо за помощь, я за тебя свечку поставлю <3

rybakov
() автор топика
Ответ на: комментарий от rybakov

В /etc/default.conf.d/luks.conf закомментировал строку kernel_cmdline

Если hostonly, то лезть в командную строку уже не требуется, в том числе я сомневаюсь, что нужно

добавил install_items+=" /etc/crypttab "

Разве что это специфично для твоего дистрибутива. В Debian это не требуется, то есть с hostonly вся криптошняга работает из коробки.

Он уже собирался с hostonly, но почему это необходимо?

Без hostonly будет собран универсальный образ без какой-либо конфигурации твоего хоста. cmdline при этом надо заполнять самому. Есть ещё hostonly_cmdline, как бы лайт-вариант, где только cmdline генерируется для хоста.

Буду благодарен, если ты укажешь, где именно в документации об этом написано

О чём именно? Сами маны в комплекте: https://github.com/dracutdevs/dracut/tree/master/man То, что здесь обсуждалось, в основном в dracut.cmdline.7. Некоторые вещи там очень лаконично описаны, придётся смотреть код модулей (там везде шелл-скрипты).

anonymous
()
Ответ на: комментарий от anonymous

Некоторые вещи там очень лаконичны описаны

Ctrl+f crypttab Хм… И вправду

Без hostonly будет собран универсальный образ без какой-либо конфигурации твоего хоста. cmdline при этом надо заполнять самому.

Потом попробую собрать без hostonly

anonymous
()
Ответ на: комментарий от anonymous

Как я и думал, он загрузился и без hostonly. Но, к моему удивлению, теперь dracut не просит снова расшифровать /dev/sda2, а только /dev/nvme0n1p1, т.е. корень. В выводе blkid только /dev/mapper/cryptroot, и мне нужно вручную открывать /dev/sda2 командой cryptsetup open /dev/sda2 cryptboot. В принципе, такое поведение меня устраивает, но я всё же хочу включить hostonly. Попробую убрать из /etc/crypttab строку cryptboot ... и посмотрю, что будет.

anonymous
()
Ответ на: комментарий от anonymous

Не знаю, на что я надеялся, но без строки cryptboot ... в /etc/crypttab я вернулся к тому, с чего начал, лол. Мне следовало это ожидать. Теперь вопрос: почему без hostonly я не должен вводить пароль для /dev/sda2, а с hostonly - должен? Как можно изменить это поведение, чтобы с hostonly у меня не спрашивали пароль для /dev/sda2?

anonymous
()

Скорее всего потому что в dracut вшит luks и он простит пароль не зависимости что именно запускает ядро, grub, efi, и другие
У меня лично uefi запускает скомплектовано ядро

SPRATAY ★★
()