Чего я хочу добиться:
- Запрос пароля только один раз во время загрузки;
- Остальные (некорневые) разделы используют ключевой файл внутри
/root/
каталога.
Чего я добился на данный момент:
- (А)Система загружается, но дважды запрашивает пароль (один раз для
/
и один раз для/usr
). - Или:(Б)система не загружается, запрашивает пароль один раз, но затем отказывается от монтирования,
/usr
говоря, что не может найти группу/том LVM. Я попадаю в оболочку и вижу, что/root/.keyfile
она недоступна./
еще не был смонтирован.
Конфигурация
Файл:/etc/crypttab
Случай А
sdc3_crypt /dev/sdc3 none luks md0_crypt /dev/md0 none luks
Случай Б
sdc3_crypt /dev/sdc3 none luks md0_crypt /dev/md0 /root/.keyfile luks
Что совершенно не сработало
- Создание файлов скриптов для ручного открытия нужного диска: те, которые в
/etc/initramfs-tools/scripts/local-premount
вызываются до того, как/
он доступен, но те, которые в/etc/initramfs-tools/scripts/local-bottom
вызываются после того, как он хочет открыться/usr
(и, следовательно, уже слишком поздно).
решение1
Наэта вики-страница(на немецком языке, к сожалению, я не нашел эквивалента на английском языке) предлагается использовать скрипт /lib/cryptsetup/scripts/decrypt_derived
для генерации ключа из открытого корневого устройства. Я постараюсь перевести важные части, но у меня естьНЕТпопробовал эту процедуру.
Чтобы добавить ключ, вам придется выполнить (как root)
mkdir /mnt/ram && mount -t ramfs -o size=1m ramfs /mnt/ram && chmod 600 /mnt/ram
/lib/cryptsetup/scripts/decrypt_derived <root_dev> > /mnt/ram/tmp.key && cryptsetup luksAddKey <usr_dev> /mnt/ram/tmp.key && rm /mnt/ram/tmp.key
umount /mnt/ram && rmdir /mnt/ram
где <root_name>
— имя вашего корневого устройства, отображаемое в /dev/mapper
(вероятно sdc3_crypt
), и <usr_dev>
устройство, на котором /usr
оно находится (вероятно /dev/md0
).
Строка для crypttab:
<usr_name> UUID=<UUID> <root_name> luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived
не забудьте пробежать
update-initramfs -u -k all
после изменения crypttab.
Вам следует сохранить «нормальный» пароль для вашего устройства usr, иначе вы не сможете открыть его в случае повреждения вашего корневого устройства.