Обновил систему, установленную из образа https://mirror.yandex.ru/altlinux/images/p10/server/x86_64/alt-server-10.0-x86_64.iso до Сизифа, сгенерировал initrd. Получил проблему, аналогичную https://bugzilla.altlinux.org/42983 Для того, чтобы не вводить пароль в initrd недостаточно файла /etc/luks.keys Нужно ещё прописать в командной строке ядра "luks-key=/etc/keys/luks.key"
Параметр ядра просто добавляет данные из cmdline в конец /etc/luks.keys. Что у вас в /etc/luks.keys ?
(Ответ для Alexey Gladkov на комментарий #1) > Параметр ядра просто добавляет данные из cmdline в конец /etc/luks.keys. > > Что у вас в /etc/luks.keys ? Путь к файлу с паролем: /etc/keys/luks.key
Created attachment 10957 [details] Лог работы скрипта /lib/uevent/handlers/085-luks
(Ответ для jqt4 на комментарий #3) > Лог работы скрипта /lib/uevent/handlers/085-luks Из лога видно, что luks-key=/etc/keys/luks.key в cmdline был и cryptsetup ключ принял. А можете показать лог, когда параметра нет ?
Created attachment 10961 [details] Лог работы скрипта /lib/uevent/handlers/085-luks из make-initrd-luks-2.26.0-alt3.noarch, Сизиф В командную строку ядра не был добавлен параметр "luks-key=/etc/keys/luks.key". В результате потребовалось ввести пароль от luks раздела в initrd/
Created attachment 10962 [details] Лог работы скрипта /lib/uevent/handlers/085-luks из make-initrd-luks-2.26.0-alt3.noarch, Сизиф В командную строку ядра был добавлен параметр "luks-key=/etc/keys/luks.key". В результате не потребовалось ввести пароль от luks раздела в initrd.
(Ответ для Alexey Gladkov на комментарий #4) > (Ответ для jqt4 на комментарий #3) > > Лог работы скрипта /lib/uevent/handlers/085-luks > > Из лога видно, что luks-key=/etc/keys/luks.key в cmdline был и cryptsetup > ключ принял. > А можете показать лог, когда параметра нет ? По ошибке лог был получен на p10 с пакетом make-initrd-luks-2.26.0-alt2.noarch Обновил систему до Сизифа и воспроизвёл проблему. Файлы /etc/luks.keys и /etc/keys/luks.key не изменились. Добавил к баге логи работы скрипта /lib/uevent/handlers/085-luks - без параметра luks-key=/etc/keys/luks.key и с этим параметром. Без параметра пришлось вводить пароль, с параметром - нет. То есть проблема воспроизвелась.
Всё понятно. Я вижу проблему. Спасибо.
Не могли бы вы положить к себе новую версию и проверить с ней ? https://raw.githubusercontent.com/osboot/make-initrd/master/features/luks/data/lib/uevent/handlers/085-luks
(Ответ для Alexey Gladkov на комментарий #9) > Не могли бы вы положить к себе новую версию и проверить с ней ? > > https://raw.githubusercontent.com/osboot/make-initrd/master/features/luks/ > data/lib/uevent/handlers/085-luks Проблема воспроизводится.
Насамом деле посде этого изменения проблема не воспроизводится если положить в образ /etc/luks.keys и /etc/keys/luks.key который прописан в конфиге. Судя по всему вы хотите создать в системе /etc/luks.keys и чтобы он был автоматически добавлен в образ и использован. Так ?
(Ответ для Alexey Gladkov на комментарий #11) > Насамом деле посде этого изменения проблема не воспроизводится если положить > в образ /etc/luks.keys и /etc/keys/luks.key который прописан в конфиге. > > Судя по всему вы хотите создать в системе /etc/luks.keys и чтобы он был > автоматически добавлен в образ и использован. Так ? Да, так: Убедившись, что rootfs на шифрованном разделе выполнить команды: # generate random key dd if=/dev/random of="$destdir"/etc/keys/luks.key iflag=fullblock bs=512c count=1 # set read permission of key for root only chmod go-r "$destdir"/etc/keys/luks.key # add key for encrypted device. Need to enter a password cryptsetup luksAddKey $(awk 'BEGIN { FS="\t" } { print $2 }' "$destdir"/etc/crypttab) "$destdir"/etc/keys/luks.key #add key file name to config files sed -i 's|none|/etc/keys/luks.key|' "$destdir"/etc/crypttab echo "/etc/keys/luks.key" > "$destdir"/etc/luks.keys echo "PUT_FILES += /etc/keys/luks.key PUT_FILES += /etc/luks.keys " >> "$destdir"/etc/initrd.mk chroot $destdir sh -c "make-initrd"
(Ответ для jqt4 на комментарий #12) > > Судя по всему вы хотите создать в системе /etc/luks.keys и чтобы он был > > автоматически добавлен в образ и использован. Так ? > Да, так: Мне не нравится эта идея. /etc/luks.keys не системный конфиг, а конфиг внутри initramfs. Создавать его в системе совершенно неправильно. initramfs:/etc/luks.keys должен генерироваться make-initrd если используется файл с ключём. > Убедившись, что rootfs на шифрованном разделе выполнить команды: > > # generate random key > dd if=/dev/random of="$destdir"/etc/keys/luks.key iflag=fullblock bs=512c > count=1 В таком формате тоже работать не будет без указания luks-key-format=raw. Как это исправить я пока не знаю. > # set read permission of key for root only > chmod go-r "$destdir"/etc/keys/luks.key > > # add key for encrypted device. Need to enter a password > cryptsetup luksAddKey $(awk 'BEGIN { FS="\t" } { print $2 }' > "$destdir"/etc/crypttab) "$destdir"/etc/keys/luks.key > > #add key file name to config files > sed -i 's|none|/etc/keys/luks.key|' "$destdir"/etc/crypttab > echo "/etc/keys/luks.key" > "$destdir"/etc/luks.keys > echo "PUT_FILES += /etc/keys/luks.key > PUT_FILES += /etc/luks.keys > " >> "$destdir"/etc/initrd.mk > > chroot $destdir sh -c "make-initrd"
(Ответ для jqt4 на комментарий #10) > (Ответ для Alexey Gladkov на комментарий #9) > > Не могли бы вы положить к себе новую версию и проверить с ней ? > > > > https://raw.githubusercontent.com/osboot/make-initrd/master/features/luks/ > > data/lib/uevent/handlers/085-luks > > Проблема воспроизводится. Проверил новую версию файла: wget https://raw.githubusercontent.com/osboot/make-initrd/master/features/luks/data/lib/uevent/handlers/085-luks md5sum -b 085-luks 73d7147156759316e8c75be54dc35868 *085-luks rpm -qf /usr/share/make-initrd/features/luks/data/lib/uevent/handlers/085-luks make-initrd-luks-2.26.0-alt3.noarch rpm -q make-initrd-luks --dump | grep 085-luks /usr/share/make-initrd/features/luks/data/lib/uevent/handlers/085-luks 4808 1648491121 73d7147156759316e8c75be54dc35868 0100755 root root 0 0 0 X Это тот же самый файл - чек-суммы одинаковые, потому и проблема воспроизвелась. Подскажите, как можно получить исправленный 085-luks ?
(Ответ для jqt4 на комментарий #14) > Это тот же самый файл - чек-суммы одинаковые, потому и проблема > воспроизвелась. > > Подскажите, как можно получить исправленный 085-luks ? Простите. Дуратский github скинул бранч, когда я копировал ссылку. Изменения находятся в бранче for-master: https://github.com/osboot/make-initrd/blob/for-master/features/luks/data/lib/uevent/handlers/085-luks
(Ответ для Alexey Gladkov на комментарий #15) > (Ответ для jqt4 на комментарий #14) > > Это тот же самый файл - чек-суммы одинаковые, потому и проблема > > воспроизвелась. > > > > Подскажите, как можно получить исправленный 085-luks ? > > Простите. Дуратский github скинул бранч, когда я копировал ссылку. Изменения > находятся в бранче for-master: > > https://github.com/osboot/make-initrd/blob/for-master/features/luks/data/lib/ > uevent/handlers/085-luks Протестировал с файлом https://raw.githubusercontent.com/osboot/make-initrd/for-master/features/luks/data/lib/uevent/handlers/085-luks и текстовым паролем в /etc/keys/luks.key Проблема не воспроизводится. Спасибо!
(Ответ для jqt4 на комментарий #16) > Протестировал с файлом > > https://raw.githubusercontent.com/osboot/make-initrd/for-master/features/ > luks/data/lib/uevent/handlers/085-luks > > и текстовым паролем в /etc/keys/luks.key > > Проблема не воспроизводится. > Спасибо! К сожалению пока не придумал как сделать лучше. Текущая реализация не позволяет использовать format=raw без указания параметра. Можно конечно закостылить, но хочется сделать нормально.
(Ответ для Alexey Gladkov на комментарий #13) > (Ответ для jqt4 на комментарий #12) > > > Судя по всему вы хотите создать в системе /etc/luks.keys и чтобы он был > > > автоматически добавлен в образ и использован. Так ? > > Да, так: > > Мне не нравится эта идея. /etc/luks.keys не системный конфиг, а конфиг > внутри initramfs. Создавать его в системе совершенно неправильно. Насколько я знаю, этот файл не используется другими программами. В нём не содержится ничего секретного. Если очень нужно, то после make-initrd его можно просто удалить. > > initramfs:/etc/luks.keys должен генерироваться make-initrd если используется > файл с ключём. > > > Убедившись, что rootfs на шифрованном разделе выполнить команды: > > > > # generate random key > > dd if=/dev/random of="$destdir"/etc/keys/luks.key iflag=fullblock bs=512c > > count=1 > > В таком формате тоже работать не будет без указания luks-key-format=raw. Как > это исправить я пока не знаю. Проверил в той же тестовой системе. # generate random key dd if=/dev/random of=/etc/keys/luks.key iflag=fullblock bs=512c count=1 # set read permission of key for root only chmod go-r /etc/keys/luks.key # add key for encrypted device. Need to enter a password cryptsetup luksAddKey $(awk 'BEGIN { FS="\t" } { print $2 }' /etc/crypttab) /etc/keys/luks.key Ввёл пароль. # add key file name to config files sed -i 's|none|/etc/keys/luks.key|' /etc/crypttab make-initrd После перезагрузки пришлось вводить пароль только 1 раз - в GRUB. До внесения исправлений приходилось вводить пароль 3 раза - в GRUB, initrd, systemd-cryptsetup. На мой взгляд так гораздо удобнее. Указывать luks-key-format=raw не потребовалось.
(Ответ для jqt4 на комментарий #18) > Указывать luks-key-format=raw не потребовалось. о как. неожиданно для меня.
Прошу собрать пакет с исправлением 085-luks в Сизиф, чтобы можно было далее собрать его в p10 для решения https://bugzilla.altlinux.org/42983
Я подумаю. В этом исправлении я вижу проблему. Раньше если был указан luks-key=, то пароль никогда не спрашивался. Сейчас это будет происходить. Когда ключ не в initramfs, то возникает рейс между инициализацией устройства с ключём и шифрованного диска, для которого этот ключ нужен.
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.