Summary: | Добавить в luks поддержку /etc/crypttab | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | jqt4 | ||||||
Component: | make-initrd | Assignee: | Alexey Gladkov <legion> | ||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||
Severity: | enhancement | ||||||||
Priority: | P5 | CC: | antohami, glebfm, ldv, legion, placeholder | ||||||
Version: | unstable | ||||||||
Hardware: | x86_64 | ||||||||
OS: | Linux | ||||||||
See Also: |
https://bugzilla.altlinux.org/show_bug.cgi?id=43080 https://bugzilla.altlinux.org/show_bug.cgi?id=44073 |
||||||||
Attachments: |
|
Description
jqt4
2022-06-23 17:25:26 MSK
make-initrd не использует /etc/crypttab. Его нужно его этому учить. ОК. Я сделал реализацию. Правда она неполная. Нет поддержки PKCS11, FIDO2, TPM2 поскольку их поддержки нет в cryptsetup. Их поддержка реализована только в systemd. (Ответ для Alexey Gladkov на комментарий #2) > ОК. Я сделал реализацию. Правда она неполная. Нет поддержки PKCS11, FIDO2, > TPM2 поскольку их поддержки нет в cryptsetup. Их поддержка реализована > только в systemd. Спасибо! Где можно взять новый make-initrd, чтобы потестировать эту реализацию? make-initrd-2.27.0-alt1 -> sisyphus: Wed Jul 06 2022 Alexey Gladkov <legion@altlinux.ru> 2.27.0-alt1 - New version (2.27.0). - Feature luks: + Add crypttab support (ALT#43056). + Try to remember the uuid of the luks device and automatically add it to crypttab. + Use luks.keys if the file is already in the initramfs (ALT#42987). - Feature kickstart: + Use /proc/devices to detect sd and virtblk block devices. - Feature locales: + Read system-wide locales. - Utilities: + initrd-ls: Fix infinite loop when unpacking zstd. + initrd-put: Add option to exclude files by pattern. + initrd-scanmod: module must satisfy all the rules from the ruleset. + mkinitrd-make-initrd: Fixed misprint, make-initrd can be found now. + make-initrd: Enforce absolute path in TMPDIR (ALT#42322). - Misc: + Check bzip2 library as the last chance for detection if there is no bzip2.pc. Created attachment 11063 [details]
Лог работы 085-luks версии 2.27.0-alt1
Протестировал make-initrd-2.27.0-alt1: Прописал добавление файлов: initrd.mk ... PUT_FILES += /etc/keys/luks.key PUT_FILES += /etc/luks.keys Создал /etc/keys/luks.key: dd if=/dev/random of=/etc/keys/luks.key iflag=fullblock bs=512c count=1 chmod go-r /etc/keys/luks.key cryptsetup luksAddKey $(awk 'BEGIN { FS="\t" } { print $2 }' /etc/crypttab) /etc/keys/luks.key Ввёл пароль. Создал /etc/luks.keys, содержащий: /etc/keys/luks.key make-initrd [00:00:15] Image is saved as /boot/initrd-5.15.52-std-def-alt1.img После перезагрузки пароль ввел 2 раза: в GRUB и systemd-cryptsetup При загрузке выдано: 085-luks: /dev/sda2: trying to find the keyfile in the '/etc/luks.keys'. 085-luks: Found keyfile '/etc/keys/luks.key' for 'sda2' encrypted partition. 085-luks: sda2-luks (upon /dev/sda2) activated successfully. systemd-cryptsetup выдаёт сообщения об ошибке: systemctl --failed UNIT LOAD ACTIVE SUB DESCRIPTION ● systemd-cryptsetup@luks\x2d0a2cd49b\x2d6e6f\x2dba4c\x2d8626\x2d101394557ac2.service loaded failed failed Cryptography Setup for luks-0a2cd49b-6e6f-ba4c-8626-101394557ac2 Добавил /etc/crypttab явно: initrd.mk ... PUT_FILES += /etc/crypttab Разобрал initrd-5.15.52-std-def-alt1.img, убедился, что /etc/crypttab в нём есть. systemd-cryptsetup выдаёт то же сообщения об ошибке. Проблема осталась. Получил лог работы 085-luks Если в initrd не добавлять файл /etc/luks.keys, то проблема не проявляется. Но тогда приходится вводить пароль вручную при работе initrd. Нужно использовать либо старый luks.keys, либо новый crypttab. Если хочется использовать crypttab, то руками его класть ненужно. Если этот конфиг уже есть в системе в /etc, то make-initrd сам его найдёт и добавит. Так сделано потому что в crypttab могут быть прописаны ключи, которые нужно добавить в образ. Created attachment 11064 [details]
Лог 085-luks при использовании только crypttab
Протестировал использование только /etc/crypttab: Удалил /etc/luks.keys Прописал /etc/keys/luks.key в /etc/crypttab cat crypttab luks-0a2cd49b-6e6f-ba4c-8626-101394557ac2 UUID=0a2cd49b-6e6f-ba4c-8626-101394557ac2 /etc/keys/luks.key luks Оставил в initrd.mk добавление только 1 файла: PUT_FILES += /etc/keys/luks.key make-initrd Выдано сообщение: 085-luks: luks keyfile does not exist: /etc/keys/luks.key Пришлось вводить пароль вручную. Разобрал initrd-5.15.52-std-def-alt1.img, убедился, что /etc/keys/luks.key в нём есть. systemd-cryptsetup не выдаёт сообщений об ошибках. Проявилась другая проблема: при чтении имени /etc/keys/luks.key из /etc/crypttab пароль не работает. Приложен лог 085-luks при использовании только crypttab Да, это опечатка. Попробуйте с вот этой версией: https://github.com/osboot/make-initrd/blob/master/features/luks/data/lib/uevent/handlers/085-luks > Проявилась другая проблема: при чтении имени /etc/keys/luks.key из /etc/crypttab
> пароль не работает.
Поясните пожалуйста. Я не понимаю.
(Ответ для Alexey Gladkov на комментарий #13) > > Проявилась другая проблема: при чтении имени /etc/keys/luks.key из /etc/crypttab > > пароль не работает. > > Поясните пожалуйста. Я не понимаю. Если rootfs на шифрованном разделе, то в initrd хотелось бы сделать 2 действия: 1. Найти в initrd пароль от шифрованного раздела, чтобы не спрашивать этот пароль у пользователя, и расшифровать раздел. 2. Взять имя для шифрованного из /etc/crypttab, чтобы systemd-cryptsetup не спрашивал у пользователя пароль от раздела и не выдавал сообщения об ошибке при попытке расшифровать уже расшифрованный раздел. Наблюдались проблемы: Если 1 выполняется с использованием имени файла с паролем из /etc/luks.keys, то 2 не выполняется. (https://bugzilla.altlinux.org/show_bug.cgi?id=43056#c6). Если попытаться выполнить 1 с использованием имени файла с паролем из /etc/crypttab, то файл не удаётся найти, хотя он есть, и 1 не выполняется. Это я пытался сказать фразой: "при чтении имени /etc/keys/luks.key из /etc/crypttab пароль не работает." > 2. Взять имя для шифрованного из /etc/crypttab ...
Хотел написать: "Взять имя для шифрованного раздела из /etc/crypttab"
(Ответ для Alexey Gladkov на комментарий #12) > Попробуйте с вот этой версией: > > https://github.com/osboot/make-initrd/blob/master/features/luks/data/lib/ > uevent/handlers/085-luks Да, с этой версией успешно читает из /etc/crypttab и имя раздела и имя файла с паролем. Это то, что нужно. Спасибо! Соберите, пожалуйста, в Сизиф. make-initrd-2.27.1-alt1 -> sisyphus: Fri Jul 08 2022 Alexey Gladkov <legion@altlinux.ru> 2.27.1-alt1 - New version (2.27.1). - Feature luks: + Fix typo and use keyfile if exists (ALT#43056). + Add more documentation. |