Как стать автором
Обновить

Secure Boot для MiniOS Linux: почему это не так страшно, как кажется

Уровень сложностиПростой

Тем, кто не знаком с дистрибутивом, поясню: MiniOS - модульный дистрибутив для съёмных накопителей на базе Debian 12, обладающий достаточно гибкими возможностями, который можно достаточно легко кастомизировать под свои нужды. Если вы уже используете данный дистрибутив, то знаете, что он использует кастомное ядро ради обеспечения поддержки драйверов AUFS и NTFS3, из-за чего не поддерживается Secure Boot. Во многих live-дистрибутивах замена ядра является достаточно трудоёмкой задачей, требующей высокой квалификации и глубоких знаний. В этой статье я расскажу вам, как быстро установить и использовать в MiniOS подписанное ядро Debian, если поддержка горячего подключения модулей и быстрого NTFS вам менее важна, чем безопасная загрузка системы.

Безопасная загрузка (Secure Boot) — это стандарт безопасности, который помогает гарантировать, что устройство загружается с использованием только доверенного программного обеспечения, которое подписано цифровой подписью изготовителем оборудования (OEM) или разработчиком операционной системы. Безопасная загрузка защищает устройство от вредоносных программ, которые могут захватить систему во время загрузки или попытаться изменить процесс загрузки. Безопасная загрузка поддерживается большинством современных устройств с прошивкой UEFI. Однако не все операционные системы поддерживают безопасную загрузку, и некоторые из них могут конфликтовать с ней. Например, некоторые дистрибутивы Linux могут не загружаться, если включена безопасная загрузка, так как их загрузчики не имеют необходимой подписи.

Все опыты мы будем проводить в виртуальной машине, но те же самые операции возможно реализовать и на реальном железе. Для выполнения всех операций нам понадобится:

  1. Дистрибутив MiniOS Standard, скачанный с сайта, либо с репозитория проекта на GitHub,

  2. от 4 ГБ оперативной памяти (ОЗУ) для сборки в чистом режиме, либо от 1 ГБ ОЗУ в новой сессии и пара ГБ места на флешке,

  3. 10 минут времени,

  4. бокал чего-нибудь вкусного, чтобы отметить положительный результат.

Чтобы ничего не запороть в уже установленной и настроенной MiniOS, при загрузке выбираем Fresh Start, чтобы система загрузилась без сохранения изменений. Если на вашем железе доступно 4 ГБ ОЗУ и больше, то лучше будет выбрать Copy to RAM. Если у вас меньше 4 ГБ, то стоит создать новую сессию, чтобы все операции производились не в оперативной памяти, после завершения сборки сессию можно будет удалить.

Выбираем чистую загрузку
Выбираем чистую загрузку

В загруженной системе открываем терминал и вводим:

sudo apt update && sudo apt install -y linux‑image‑amd64 git

Упражняемся в воде команд в терминале
Упражняемся в воде команд в терминале

Если у вас 32-битная версия, то заменяете linux‑image‑amd64 на linux‑image‑686 или на linux‑image‑686-pae, если процессор поддерживает PAE. Помимо этого, вы можете попробовать установить более свежее ядро из бэкпортов, но это на ваш страх и риск.

После завершения установки ядра необходимо скачать скрипты сборки MiniOS:

git clone --depth=1 https://github.com/minios-linux/minios-live.git

Переходим в папку скриптов сборки initrd:

cd ./minios-live/linux-live/initramfs/livekit-mos

Далее нам необходимо узнать точное наименование устанавливаемого ядра, выполняем в терминале ls /usr/lib/modules

Получаем имя только что установленного ядра
Получаем имя только что установленного ядра

6.1.67-mos-amd64 - это текущее ядро системы, кастомные ядра MiniOS имеют суффикс mos в названии, нам же нужно родное ядро Debian - 6.1.0-17-amd64.

Собираем initrd. Обратите внимание, что команду необходимо выполнять через sudo, либо под пользователем root, иначе вы получите кучу ошибок и битый файл вместо рабочего initrd.

sudo ./initramfs_create 6.1.0-17-amd64

Результат сборки initrd
Результат сборки initrd

Итак, мы получили собранный initrd (после сборки его адрес появится в терминале), теперь необходимо всё собрать воедино. Для начала, упакуем модули ядра. Команды выполняем с sudo, чтобы владельцем файлов и папок был root.

cd ~

sudo mkdir build/usr/lib/modules

sudo cp -r /usr/lib/modules/6.1.0-17-amd64 build/usr/lib/modules/

sudo mksquashfs build 01-kernel-6.1.0-17-amd64-zstd.sb -comp zstd -b 1048576

Наименование образа с модулями ядра может быть произвольным, в данном примере я лишь придерживаюсь схемы наименований, принятой в MiniOS. Также, желательно, чтобы образ начинался с 01 в названии, это определяет очерёдность его подключения при загрузке системы.

После завершения сборки initrd и образа с модулями ядра, необходимо всё скопировать в нашу систему и настроить файлы конфигурации загрузки. Я буду копировать всё на ту же флешку, с которой запущена система, её данные находятся в /run/initramfs/memory/data:

sudo cp 01-kernel-6.1.0–17-amd64-zstd.sb /run/initramfs/memory/data/minios/

sudo cp /tmp/minios-initramfs-26572.img /run/initramfs/memory/data/minios/boot/initrfs-6.1.0-17-amd64.img

sudo cp /boot/vlinuz-6.1.0-17-amd64 /run/initramfs/memory/data/minios/boot/

Копирование подготовленных файлов на флешку
Копирование подготовленных файлов на флешку

Теперь необходимо отредактировать файлы конфигурации загрузчиков, добавив туда пункт для загрузки нашего ядра.

sudo mousepad /run/initramfs/memory/data/minios/boot/syslinux.cfg

sudo mousepad /run/initramfs/memory/data/minios/boot/grub/grub.cfg

В обоих файлах я добавил соответствующие записи первым пунктом, заменив наименование пункта меню и прописав пути для созданных vmlinuz и initrd. Вы можете изменить или добавить необходимые пункты в меню, при необходимости, либо просто заменить оригинальные ядро и initrd на новые, оставив меню неизменным.

Добавляем пункт в файл конфигурации
Добавляем пункт в файл конфигурации

После завершения редактирования можно перезагрузиться и проверить работоспособность установленного ядра.

При загрузке видно, что используется OverlayFS вместо AUFS
При загрузке видно, что используется OverlayFS вместо AUFS
Проверяем запущенное ядро
Проверяем запущенное ядро

Текст получился достаточно объёмный, но все операции действительно можно уложить в 5-10 минут. Если у вас всё получилось так же легко и просто, как у меня, я вас поздравляю.

Пришла пора опустошить приготовленный бокал
Пришла пора опустошить приготовленный бокал

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.