ESPNMourinho made El Clásico unmissable. Now, he's back for moreCNN Türk29 Ekim'de bazı toplu taşıma hizmetleri ücretsiz olacakThe Jerusalem PostFive wounded in shooting attack near Hebron, IDF launches manhunt for terroristRTP DesportoLiga Conferência. Braga bate Gent por 2-0 e soma três pontosESPN DeportesPuka Nacua deja práctica de Rams por lesiónInquirerTyphoon Rosal keeps strength; 2 areas under Signal No. 2PunchAfenifere leader Fasoranti for burial December 17Bollywood HungamaIMA seeks review of Sunny Deol starrer Suryaa: Ant Se Aarambh Tak; raises concerns over portrayal of doctors and hospital violence한겨레‘납 배출주사’ 유통 73% 동네 의원…서울 강남구가 공급량 1위Inquirer EntertainmentChina’s first AI film hits cinemas, but public reception lukewarmUOLTesla em modo autônomo mata homem de 71 anos em rodovia da CalifórniaSky TG24Brasile, Lula-Bolsonaro testa a testa al 50% nei sondaggi: domenica il ballottaggio
The Daily Newsstand · Free, Always
Friday, October 23, 2026

Secure Boot в Arch Linux: включаем для UKI без замены заводских ключей

Translate

Arch Linux, в отличие от многих дистрибутивов, не настраивает Secure Boot по умолчанию. Для установки он требует его отключить (хотя можно и подписать образ). Затем, если же мы все же хотим включить у себя эту меру защиты, на вики есть разные способы это сделать. Secure Boot можно настроить:

  • Используя sbctl, заменив все заводские ключи UEFI на свои

  • Через shim

  • Добавив ключ через интерфейс UEFI

На вики много материала по Secure Boot на все случаи жизни, и новичку в нем легко заблудиться. В этой статье я, новичок-арчевод, рассказываю, как настроил у себя Secure Boot через добавление ключа через интерфейс UEFI, в виде пошагового руководства.

Эта статья не ставит целью сделать абсолютно железный непробиваемый Secure Boot, а скорее рассказывает, как простым способом на Arch Linux включить базовую защиту загрузочного образа, соизмеримую с тем, что есть по умолчанию на Windows.

Почему не sbctl enroll-keys и не shim

Я бы сказал, в моем случае причины и там и там идеологические:

  • shim завязан на сертификаты Microsoft. А мне не хочется привязывать Linux к сертификату Microsoft, если можно этого не делать

  • sbctl enroll-keys -m, как другая крайность, предлагает поменять всю цепочку ключей PK -> KEK -> DB на свою, заменив заводской ключ и переставив сертификаты microsoft с нуля. С одной стороны, своя цепочка увеличивает безопасность. Но, с другой - это способ более рискованный: на вики статья пестрит предупреждениями в красных рамках о том, что может сломаться. Помимо всего, на мой взгляд, он нарушает принцип разделения ответственности: не должна утилита Linux отвечать за добавление сертификатов винды. Даже флаг -firmware-builtin не говорит "не трогать": он говорит "переписать, включив дефолтные ключи". Я бы предпочел, чтобы каждая система сама отвечала за себя.

Так, я решил полагаться на принцип минимального вмешательства: добавить только то, что нужно, и не трогать то, что уже работает. То есть, просто добавить новый ключ Arch Linux в существующий набор ключей.

Шаги описаны для моей материнской платы ASUS Prime 790-P. Большинство современных материнских плат имеют похожий функционал UEFI и настроек ключей. Если на вашей материнской плате такого функционала нет - увы, этот способ настройки вам не подойдет.

Шаг 0. Делаем бэкап ключей

Перед любым ответственным действием мы делаем бэкап. Для этого нам потребуется флешка с файловой системой FAT. Мы:

  • Подключаем флешку

  • Заходим в настройки UEFI BIOS, находим раздел про Secure Boot, и выбираем пункт “Сохранить все ключи”

Пункт меню UEFI для бэкапа ключей

Пункт меню UEFI для бэкапа ключей

  • Из списка дисков выбираем флешку. Выглядит страшно, но это просто список дисков.

    Выбор флешки для бэкапа

    Выбор флешки для бэкапа

Ключи сохранены на флешку. Перезагружаемся и записываем ключи с флешки в надежное место. В случае чего, можно загрузить их обратно.

Шаг 1. Генерируем ключ

Сделав бэкап, мы загружаемся в Arch Linux и там генерируем новые ключи для подписи. Для подписи нам потребуется пакет sbsigntools, он же автоматически ставит openssl:

sudo pacman -S sbsigntools

Создаем папку и генерируем ключ:

sudo install -d -m 700 /etc/secureboot
sudo openssl req \   
  -new -x509 \   
  -newkey rsa:4096 \   
  -sha256 \   
  -nodes \   
  -days 3650 \  
  -subj "/CN=My Arch Linux Secure Boot/" \   
  -keyout /etc/secureboot/db.key \    
  -out /etc/secureboot/db.pem
sudo chmod 600 /etc/secureboot/db.key

Для UEFI мне еще потребовалось создать копию публичного ключа в формате DER:

sudo openssl x509 \ 
  -in /etc/secureboot/db.pem \  
  -outform DER \   
  -out /etc/secureboot/db.cer

Шаг 2. Добавляем ключ в UEFI в раздел DB

Мы записываем новый ключ на флешку и снова загружаемся в UEFI.

Там мы заходим в раздел Secure Boot и добавляем наш ключ в раздел DB

Добавление ключа в Secure Boot

Добавление ключа в Secure Boot

Выбираем флешку и наш файл db.cer

Выбор ключа для добавления в DB

Выбор ключа для добавления в DB

Ясное дело, сохраняем настройки BIOS.

Перезагрузившись в Linux, мы можем убедиться, что ключ успешно добавлен, через ту же утилиту sbctl:

[me@my_computer]$ sbctl list-enrolled-keys
PK:
  ASUSTeK MotherBoard PK Certificate
KEK:
  ASUSTeK MotherBoard KEK Certificate
  Microsoft Corporation Third Party Marketplace Root
  Microsoft RSA Devices Root CA 2021
DB:
  Microsoft Corporation Third Party Marketplace Root
  Microsoft Root Certificate Authority 2010
  Microsoft RSA Devices Root CA 2021
  Microsoft RSA Devices Root CA 2021
  Microsoft Root Certificate Authority 2010
  My Arch Linux Secure Boot

Шаг 3. Подписываем ядро

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

Как описано в названии, способ описан для UKI - Unified Kernel Image, который у меня загружается сразу из BIOS-опции, минуя загрузчики. Настройка для GRUB или systemd-boot выходит за рамки этой статьи.

Удобное место в случае UKI - это хук mkinitcpio, который собирает initramfs при каждом обновлении ядра. Для этого мы создаем файл в папке /etc/initcpio/post

Назвать файл можно как угодно. В моем случае он называется uki-sbsign. В $3 ему на вход приходит путь к текущему образу ядра. Его и нужно подписать.

#!/usr/bin/env bash
uki="$3"
[[ -n "$uki" ]] || exit 0

key="/etc/secureboot/db.key"
cert="/etc/secureboot/db.pem"

if ! /usr/bin/sbverify --cert "$cert" "$uki" &>/dev/null; then    
  echo "UKI to sign: $uki"    
  /usr/bin/sbsign \    
    --key "$key" \       
    --cert "$cert" \       
    --output "$uki" \      
    "$uki"
else    
  echo "UKI already signed, skipping"
fi

Добавляем ему возможность исполняться:

sudo chmod +x /etc/initcpio/post/uki-sbsign

Важно, что мы подписываем UKI целиком. Таким образом, мы подписываем сразу и ядро, и initramfs, и другие данные, необходимые для загрузки.

Перед запуском следующей команды, на всякий случай, стоит сделать бэкап образа ядра arch-linux.efi.

Проверяем скрипт командой mkinitcpio -P. Среди вывода мы должны увидеть что-то подобное:

==> Initcpio image generation successful
==> Creating unified kernel image: '/boot/efi/EFI/Linux/arch-linux.efi'
==> Unified kernel image generation successful
==> Running post hooks  -> Running post hook: [uki-sbsign]
UKI to sign: /boot/efi/EFI/Linux/arch-linux.efi
Signing Unsigned original image

Ядро успешно подписано! После этого можно включать Secure Boot и проверять.

Тот же самый хук теперь будет срабатывать после каждого pacman -Syu, так что каждое новое ядро будет подписываться автоматически. Дело сделано!

Arch Linux загружается из подписанного UKI-файла

Arch Linux загружается из подписанного UKI-файла

Эта статья - часть моего эксперимента по переезду из экосистемы Apple на селф-хост и Open Source ПО на компьютере, ноутбуке и телефоне. Дневник своего эксперимента я веду в своем телеграм-канале.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.