Современные EFI/BIOS в последнее время порой идут с неотключаемым SecureBoot или же порой очень сложно найти, где оно отключается. Зачем он нужен и какую пользу приносит, об этом как-нибудь в другой раз. Слишком обширная тема.
Сейчас мы разберём, как подписывать сторонние модули ядра, не входящие в основную поставку, чтобы они работали с SecureBoot. для примера возьмём VirtualBox, модули которого, обычно идут в виде исходников и собираются с помощью DKMS.
Я использую Fedora 34, но это работает в любом современном дистрибутиве.
Для начала нам понадобится mokutil.
sudo dnf update
sudo dnf install mokutil
Затем создаём новый каталог и генерим пару RSA:
sudo -i
mkdir /root/signed-modules
cd /root/signed-modules
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
chmod 600 MOK.priv
После чего необходимо добавить пароль. Этот пароль нам потребуется при следующей перезагрузке.
sudo mokutil --import MOK.der
Затем перезагружаемся и на появившемся синем экране выбираем: Enroll MOK --> Continue --> вбиваем пароль из предыдущего шага
Теперь уже создаём скриптик, которым мы будем подписывать модули ядра:
cd /root/signed-modules
vim sign-virtual-box
И сам скрипт, собственно:
#!/bin/bash
for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
echo "Signing $modfile"
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
/root/signed-modules/MOK.priv \
/root/signed-modules/MOK.der "$modfile"
done
На всякий случай можете проверить расположение signfile и если что, подправить пути в скрипте выше:
find /usr/src -name signfile
И далее:
chmod 700 sign-virtual-box
./sign-virtual-box
И пересобираем модуль:
modprobe vboxdrv
В дальнейшем скрипт НЕ УДАЛЯЕМ, как и сгенерированные ключи. Они нам потребуется при каждом обновлении ядра. А вот mokutil будет уже не обязателен.
This is crosspost from
https://techquisitor.dreamwidth.org/332890.html