LINUX.ORG.RU

systemd и key-файл LUKS/dm-crypt на флешке

 ,


1

1

Третьи сутки не могу заставить Debian Stretch (винт полностью зашифрован при установке, /boot вынесен на флешку) стартовать с использованием key-файла на запускной флешке. Многочисленные нагугленные инструкции относятся к до-systemd'шной эре, как его стартовать в новых условиях так и не нашел. Прошу подсказать по теме или дать ссылку где прочитать.

Если вкратце, то нужен keyscript. Если ключ в файле, то подойдёт стандартный дебиановский. Если ключ это блочное устройство, то надо сделать свой. Сустемдешный способ у меня вроде не работал из-за кривых дебиановских костылей в initramfs :))

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

Был бы очень признателен. Т.к. в большинстве просмотренных мануалов:

UPD: systemd не умеет passdev, поэтому при обновлении debian до 8, надо остаться на sysvinit (как это сделать написано в официальной информации о выпуске), а при чистой установке, соответственно, перейти с systemd на sysv.

Соответственно, незапуск с прописыванием в /etc/crypttab keyscript=/lib/cryptsetup/scripts/passdev списал на несовместимость systemd c passdev.

По вышеприведенной ссылке на свежую инструкцию застрял на построении используемого решения с mkinitcpio, который вроде чисто Arch'евский и в Debian не идет (как я понял).

Сейчас курю про dracut.

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

Не надо dracut, если не готов огрести неожиданных последствий.

Вот копипаста рецепта:

Сегодня я расскажу о том, как подружить Debian, systemd и расшифровку корня ключом на дисковом носителе. Вообще это элементарно, но только не в Debian. Предположим, что наш ключ это раздел на флэшке /dev/disk/by-partlabel/rootkey, который можно тупо прочесть от начала до конца (оффсеты и прочие возможности cryptsetup systemd поддерживает, насчёт дебиановских костылей не знаю). Тогда в /etc/crypttab мы должны записать что-то типа

root /dev/disk/by-partlabel/debian /dev/disk/by-partlabel/rootkey luks,discard,keyscript=/usr/local/bin/keyscript

Вся суть здесь в keyscript — без него в initramfs просто ни хрена не добавится, и вам придётся чинить систему, хотя такой формат поддерживается везде. Везде, кроме дебиановского скрипта в initramfs. Сам скрипт обязательно должен быть исполняемым и в данном случае может выглядеть хотя бы так:

#!/bin/sh

until test -b $1; do
    sleep 1;
done
/bin/cat $1

Как видите, скрипт делает просто бессмысленную работу. Использовать дистрибутивный passdev не стоит даже если вас устроит ключ на ФС, потому что у этого хелпера свои требования к синтаксису поля с ключом, несовместимые с чем угодно другим, включая systemd После этого делаем update-initramfs и радоваемся.

Скрипт тебе придётся писать самому :)

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

По приведенному алгоритму с использованием бессмысленного скрипта в keyscript не получилось. При update-initrafs -u:

>>root@debserv:/# update-initramfs -u

update-initramfs: Generating /boot/initrd.img-4.6.0-1-amd64
cp: не удалось выполнить stat для '/etc/modprobe.d/*': Нет такого файла или каталога
cryptsetup: WARNING: target md_root has an invalid keyscript, skipped

Добил все-таки до победного по вот этой старенькой статье на хабре: https://habrahabr.ru/post/91948/ , заменив последний аргумент во вставляемой в /etc/crypttab строке (Этап 2, п.Б по статье, если кто-нибудь будет повторять) с luks,cipher=aes-cbc-essiv:sha256 на luks,cipher=aes-cbc-essiv:sha256,keyscript=/lib/cryptsetup/scripts/passdev.

Все заработало, почему по другим инструкциям вариант с passdev не прошел - не знаю. Очевидно - мои кривые руки.

Всем спасибо, откликнувшимся +10 в карму.

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

По приведенному алгоритму с использованием бессмысленного скрипта в keyscript не получилось.

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

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

Да, конечно, это я некорректно сократил:

Как видите, скрипт делает просто бессмысленную работу.

Вам отдельное спасибо за отклик.

Neuro75
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.