Подробный гайд по использованию пакета mokutil в операционной системе Astra Linux
Astra Linux 1.8 (как и другие современные дистрибутивы на базе Debian) поддерживает Secure Boot. Если этот режим включен, ядро системы будет загружать только те модули и драйверы, которые подписаны доверенными ключами. Если вам нужно установить сторонний драйвер (например, NVIDIA, VirtualBox, специфические Wi-Fi адаптеры) или собрать своё ядро, система его заблокирует.
Утилита mokutil позволяет добавить ваш личный ключ (Machine Owner Key — MOK) в базу доверенных ключей UEFI, чтобы система принимала подписанные вами модули.
Ниже представлен подробный пошаговый гайд.
Шаг 1. Установка необходимых пакетов
Откройте терминал и установите mokutil и openssl (он понадобится для генерации ключей):
sudo apt update
sudo apt install mokutil openssl
Проверьте, включен ли Secure Boot:
mokutil --sb-state
Если вывод показывает SecureBoot enabled, значит, вам действительно нужно использовать MOK для загрузки неподписанных модулей.
Шаг 2. Генерация пары ключей MOK
Нам нужно создать приватный ключ (для подписи модулей) и публичный ключ (для добавления в UEFI).
1. Создайте директорию для ключей и перейдите в нее:
mkdir -p ~/mok-keys
cd ~/mok-keys
2. Создайте конфигурационный файл для openssl. Откройте его в текстовом редакторе (например, nano):
nano request.conf
Вставьте туда следующий текст (можете изменить CN на свое имя):
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
CN = Denis Sergeevich MOK
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano).
3. Сгенерируйте сами ключи:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -config request.conf
В результате у вас появятся два файла: MOK.priv (приватный, храните его в секрете!) и MOK.der (публичный, его мы будем регистрировать).
Шаг 3. Импорт ключа в очередь MOK
Теперь передадим публичный ключ в утилиту mokutil.
sudo mokutil --import MOK.der
Важный момент: Утилита попросит вас создать пароль для подтверждения операции.
- Ограничения UEFI: Придумайте простой пароль, состоящий только из букв латинского алфавита и цифр (например,
AstraMok2024). - Некоторые BIOS/UEFI имеют лимит на длину пароля (часто максимум 16 символов) и не поддерживают спецсимволы.
- Введите пароль, а затем повторите его для подтверждения.
Проверьте, что ключ добавлен в очередь:
mokutil --list-new
Вы должны увидеть информацию о вашем ключе CN = Denis Sergeevich MOK.
Шаг 4. Регистрация ключа в UEFI (Самый важный шаг!)
Ключ пока не работает, его нужно подтвердить на уровне материнской платы.
1. Перезагрузите компьютер:
sudo reboot
- Сразу после старта (до загрузки Astra Linux) появится синий экран Perform MOK management (MOK Manager).
- Используйте стрелки на клавиатуре и выберите Enroll MOK, нажмите Enter.
- Выберите Continue, нажмите Enter.
- Выберите Yes, нажмите Enter.
- Система попросит ввести пароль, который вы задали на Шаге 3.
Внимание:
Раскладка клавиатуры в UEFI почти всегда английская (QWERTY), даже если в BIOS выбрана другая. Если у вас клавиатура с русской гравировкой, набирайте пароль вслепую или ориентируйтесь на английские буквы. Цифры на цифровой клавиатуре (Numpad) обычно работают.
- После ввода пароля выберите Reboot.
Шаг 5. Проверка регистрации
После загрузки Astra Linux снова откройте терминал и проверьте список доверенных ключей:
mokutil --list-enrolled
Если в выводе есть ваш ключ (CN = MOK), значит, всё прошло успешно! Очередь новых ключей теперь должна быть пуста:
mokutil --list-new
Шаг 6. Практическое применение: Подпись модуля ядра
Теперь, когда ключ зарегистрирован, вы можете подписывать модули ядра. В Astra Linux для этого используется утилита kmodsign (или sign-file из исходников ядра). Допустим, вам нужно подписать модуль vboxdrv.ko (для VirtualBox).
Найдите путь к модулю:
modinfo -n vboxdrv
(Допустим, путь: /lib/modules/$(uname -r)/updates/dkms/vboxdrv.ko)
Подпишите его вашим приватным ключом:
sudo kmodsign sha512 ~/mok-keys/MOK.priv ~/mok-keys/MOK.der /lib/modules/$(uname -r)/updates/dkms/vboxdrv.ko
Проверьте подпись:
modinfo vboxdrv | grep sig
Вы должны увидеть строку signer: CN = MOK. Теперь модуль можно загружать (sudo modprobe vboxdrv), и Secure Boot его не заблокирует.
Дополнительные полезные команды mokutil
* Удалить ключ из доверенного списка:
sudo mokutil --delete MOK.der
(Потребуется перезагрузка и подтверждение в синем меню UEFI).
* Сбросить все пользовательские ключи (очистить MOK):
sudo mokutil --reset
(Также потребует подтверждения в UEFI при перезагрузке).
* Посмотреть состояние Secure Boot:
mokutil --sb-state
* Отключить/Включить Secure Boot через mokutil (требует поддержки со стороны UEFI):
sudo mokutil --sb 0 # Отключить
sudo mokutil --sb 1 # Включить
Примечание:
В некоторых реализациях UEFI (особенно на серверах или в защищенных контурах Astra) изменение этого флага через mokutil может быть заблокировано на уровне прошивки, и менять его придется только через настройки BIOS.
Совет для работы с DKMS (Драйверы NVIDIA, VirtualBox и т.д.)
Если вы устанавливаете драйверы через DKMS, они пересобираются при каждом обновлении ядра. Чтобы не подписывать их вручную каждый раз, можно настроить автоматическую подпись.
1. Скопируйте ключи в защищенную системную директорию:
sudo mkdir -p /usr/local/share/mok-keys
sudo cp ~/mok-keys/MOK.priv /usr/local/share/mok-keys/
sudo cp ~/mok-keys/MOK.der /usr/local/share/mok-keys/
sudo chmod 600 /usr/local/share/mok-keys/MOK.priv
- В Astra Linux (и Debian) обычно достаточно создать скрипт-хук для DKMS. Создайте файл
/etc/dkms/framework.conf(если его нет) или добавьте в него настройку пути к ключам, либо используйте стандартный механизмsigning_key.pem, который DKMS ищет в/var/lib/dkms/.
Самый надежный способ в Astra — создать скрипт /etc/kernel/postinst.d/sign-modules, который будет автоматически подписывать все новые модули в папке /lib/modules/$(uname -r)/updates/dkms/ вашим ключом MOK.priv при обновлении ядра.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.