ГОСТ-зашифрованный корневой раздел: dracut и ранняя загрузка¶
Встроенный «Кузнечик» доступен уже в образе ядра НАЙС.ОС. Он не требует переноса отдельных ГОСТ .ko в initramfs. Для загрузки системы с корневым LUKS2-томом при этом обязательно необходима работающая цепочка раннего разблокирования: обнаружение диска, device-mapper/dm-crypt, средство открытия LUKS2, пароль или допустимый источник ключа, правильный UUID и параметры GRUB2.
На обычном сервере с незашифрованным / ГОСТ-шифрованный дополнительный диск можно открывать после запуска системы. Для зашифрованного / всё перечисленное необходимо до монтирования основной файловой системы.
1. Как проходит загрузка НАЙС.ОС с ГОСТ-LUKS2¶
UEFI / firmware
↓
GRUB2 выбирает vmlinuz-<версия> и initramfs-<версия>.img
↓
Ядро НАЙС.ОС — Кузнечик, Стрибог и Crypto API уже встроены
↓
Dracut/initramfs — поиск физического накопителя, сборка device-mapper
↓
systemd-cryptsetup — ввод пароля, LUKS2, открытие /dev/mapper/<имя>
↓
dm-crypt — шифрование/расшифрование через xts(kuznyechik)
↓
Монтирование корневой файловой системы и переход в основную систему
Криптографические алгоритмы ГОСТ уже скомпонованы в ядро. Поэтому initramfs не содержит самостоятельный файл модуля «Кузнечика»; наличие соответствующего шифра подтверждают по конфигурации ядра и Crypto API.
2. Что должен содержать initramfs¶
| Функция | Системный компонент | Где проверять |
|---|---|---|
| Работа с LUKS2 | systemd-cryptsetup / dracut-модуль crypt |
lsinitrd, lsinitrd -m |
| Разбор LUKS2 | libcryptsetup и зависимости |
lsinitrd |
| Разблокировка ключевого слота | библиотека, поддерживающая KDF и формат ключевого слота (например Argon2id/AES) | тест открытия из ранней среды |
| Шифрование содержимого | встроенный xts(kuznyechik) |
/boot/config-<версия>, Crypto API после загрузки |
| Device mapper | dm_mod, dm_crypt или встроенные эквиваленты |
Kconfig и lsinitrd |
| Накопитель | NVMe, SATA/AHCI, virtio-blk, virtio-scsi, USB и др. | Kconfig и lsinitrd |
| Корневая файловая система | ext4, XFS, Btrfs и др. | Kconfig и lsinitrd |
| Консоль и клавиатура | система ввода пароля, раскладка, драйвер консоли | проверка загрузки VM |
| Идентификаторы устройств | rd.luks.uuid, rd.luks.name, root=... либо подходящая конфигурация crypttab |
/proc/cmdline, GRUB2, dracut |
Встроенная криптография не означает автоматическую разблокировку
Алгоритм доступен всегда при загрузке соответствующего ядра, но пароли, ключи, настройки открытия и драйверы накопителей по-прежнему должны работать. Для критичного корневого тома нужен проверенный резервный сценарий.
3. Сверяем запущенное ядро и раннее окружение¶
Команды только читают состояние системы:
KVER=$(uname -r)
printf 'Ядро: %s
' "$KVER"
grep -E '^CONFIG_CRYPTO_(NICEOS_GOST_KUZNYECHIK|XTS|CBC|USER_API)' "/boot/config-$KVER"
ls -lh "/boot/vmlinuz-$KVER" "/boot/initramfs-$KVER.img"
lsinitrd -m "/boot/initramfs-$KVER.img"
lsinitrd "/boot/initramfs-$KVER.img" | grep -E 'systemd-cryptsetup|libcryptsetup|dracut-crypt-lib|dm-crypt|dm_crypt' | head -80
Если dm_crypt или драйвер файловой системы имеет CONFIG_*=y, отдельный модуль в initramfs для него не требуется. Если значение m, образ должен содержать соответствующий .ko и его зависимости.
4. Проверка ГОСТ без .ko¶
KVER=$(uname -r)
grep -F 'CONFIG_CRYPTO_NICEOS_GOST_KUZNYECHIK=y' "/boot/config-$KVER"
grep -F 'CONFIG_CRYPTO_XTS=' "/boot/config-$KVER"
Для полной диагностики ядра используется реестр Crypto API. Параметр шаблона XTS также должен быть включён. Проверка должна подтверждать встроенную конфигурацию и доступность алгоритмов, а не искать файл отдельного модуля.
5. Проверка самого LUKS2 и его UUID¶
Эти команды выполняют только чтение; вместо /dev/НУЖНЫЙ_РАЗДЕЛ используйте настоящее устройство с существующим LUKS2, которое не предполагается форматировать:
lsblk -o NAME,SIZE,TYPE,FSTYPE,UUID,MOUNTPOINTS
cryptsetup isLuks /dev/НУЖНЫЙ_РАЗДЕЛ && echo 'Найден LUKS'
cryptsetup luksUUID /dev/НУЖНЫЙ_РАЗДЕЛ
cryptsetup luksDump /dev/НУЖНЫЙ_РАЗДЕЛ | sed -n '1,100p'
Если используется парольная разблокировка, убедитесь, что на этапе initramfs корректно работает нужная раскладка клавиатуры. Особая осторожность требуется при сложных символах пароля, консоли гипервизора и удалённом доступе.
6. Конфигурация dracut для LUKS¶
Dracut в НАЙС.ОС может собирать раннее окружение по конфигурации машины. Чтобы явно включить компоненты LUKS в тестовом варианте, используется файл в /etc/dracut.conf.d/:
install -d -m 755 /etc/dracut.conf.d
cat > /etc/dracut.conf.d/55-niceos-luks.conf <<'EOF_CONF'
# НАЙС.ОС: ранняя поддержка LUKS2 при зашифрованном корне.
add_dracutmodules+=" crypt "
EOF_CONF
Этот файл влияет на последующие сборки initramfs; он не изменяет работающий образ. Параметры add_drivers и force_drivers предназначены для драйверов, поставляемых отдельными модулями, — например, драйверов диска или device-mapper при соответствующей конфигурации ядра. Встроенный ГОСТ не добавляется в эти списки.
При необходимости ранней загрузки других дисковых драйверов используйте add_drivers или force_drivers с их реальными именами, предварительно проверив конфигурацию ядра. Не используйте drivers как исключительный список без полного понимания зависимостей: можно случайно исключить драйвер корневого диска.
7. Безопасная сборка пробного initramfs¶
Этот сценарий не заменяет действующий образ, не редактирует GRUB2 и не перезагружает сервер:
KVER=$(uname -r)
STAGE="/var/tmp/niceos-luks-$KVER-test.img"
test -s "/boot/initramfs-$KVER.img" || exit 1
dracut --kver "$KVER" "$STAGE"
ls -lh "$STAGE"
lsinitrd -m "$STAGE"
lsinitrd "$STAGE" | grep -E 'systemd-cryptsetup|libcryptsetup|dracut-crypt-lib|dm_crypt' | head -60
Тестовый образ не становится загрузочным автоматически. Сравните его состав с действующим, проверьте размер, включение накопителя, поддержку LUKS и всех необходимых библиотек. Наличие файлов ещё не равно успешной загрузке: окончательный тест проводится в отдельной виртуальной машине с консолью.
8. Настройка загрузочной записи GRUB2¶
В НАЙС.ОС используется GRUB2 и создание grub.cfg в ходе установки ядра. Для зашифрованного корня параметры должны указывать на UUID самого LUKS-контейнера, а root= — на файловую систему после разблокировки, например:
Способ задания имени зависит от фактической конфигурации dracut/systemd и действующего /etc/crypttab. Не переносите эти строки в рабочий GRUB2 вслепую; сначала подтвердите соответствие выбранному профилю и прочитайте cat /proc/cmdline на успешно загруженном тестовом экземпляре.
9. Различайте crypttab в основной системе и initramfs¶
Файл /etc/crypttab может управлять открытием дополнительных устройств после загрузки. Для корневого тома параметры должны быть доступны в раннем окружении: в initramfs или в командной строке ядра. Содержимое основной /etc/crypttab ещё недоступно, пока / зашифрован и закрыт.
Для дополнительного тома автоматическая разблокировка обычно настраивается уже после запуска системы: см. физические накопители. Не помещайте незащищённый файл ключа в открытый initramfs или EFI-раздел, если это противоречит вашей модели угроз.
10. Проверка нового ядра перед обновлением¶
NEWKVER='<точная-версия-нового-ядра>'
test -s "/boot/vmlinuz-$NEWKVER"
test -s "/boot/initramfs-$NEWKVER.img"
grep '^CONFIG_CRYPTO_NICEOS_GOST_KUZNYECHIK=y' "/boot/config-$NEWKVER"
lsinitrd -m "/boot/initramfs-$NEWKVER.img"
lsinitrd "/boot/initramfs-$NEWKVER.img" | grep -E 'systemd-cryptsetup|libcryptsetup|dracut-crypt-lib' | head -30
Дополнительно сверьте наличие нужных драйверов накопителя и файловой системы, правила поиска LUKS-тома, доступность консоли и возможность выбора рабочего предыдущего ядра. ГОСТ-криптография входит в пакет ядра НАЙС.ОС; отдельная установка алгоритмов не выполняется.
11. Что делать, если новая загрузка не удалась¶
- Используйте консоль гипервизора или заранее подготовленную среду восстановления.
- Определите, остановилась ли загрузка до обнаружения диска, при разблокировании LUKS или при монтировании файловой системы.
- Проверьте UUID устройства, раскладку и правильность пароля, наличие
cryptв initramfs, драйверов диска и device-mapper. - Запустите сохранённую рабочую запись GRUB2, если она способна открыть данный том.
- Не выполняйте
luksFormatиmkfsна существующем разделе с данными. - Для повреждённого заголовка применяйте отдельную процедуру восстановления с подтверждённой резервной копией.
12. Когда шифрованный диск будет работать всегда¶
Встроенность «Кузнечика» устраняет один большой класс отказов: шифр не пропадёт из-за несовпадения стороннего модуля и версии ядра. Но доступность данных после каждой перезагрузки зависит от целостности LUKS2, пароля, заголовка, диска, initramfs, выбранного ядра и корректной загрузочной записи. Поэтому для критичной системы необходим контроль обновлений, резервирование ключевых данных и проверенная аварийная загрузка.
Связанные материалы: раздел ГОСТ в ядре, резервирование LUKS2, диагностика, переход со старого механизма.