Чому я отримую "Необхідний ключ недоступний" під час встановлення сторонніх модулів ядра або після оновлення ядра?


79

Ця проблема трапляється лише в системах UEFI з увімкненою безпечною завантаженням.

Коли я намагаюся встановити модулі DKMS, такі як драйвери VirtualBox, Nvidia або Broadcom, вони не встановлюються, і я отримую, Required key not availableколи я намагаюся modprobeїх використовувати.

VirtualBox скаржиться, що vboxdrvне завантажується.

wlДрайвер Broadcom показаний у lspci -kвигляді модуля ядра, але він не використовується. sudo modprobe wlкидки Required key not available.

Також ця проблема може статися, коли я встановлюю деякі модулі ядра з джерел git.

Ця проблема може з’явитися після оновлення ядра, як відключений бездротовий адаптер, чорний екран після перезавантаження тощо.

Як я можу це виправити?


Відповіді:


85

Оскільки ядро ​​Ubuntu 4.4.0-20, EFI_SECURE_BOOT_SIG_ENFORCEувімкнено конфігурацію ядра. Це запобігає завантаженню непідписаних сторонніх модулів, якщо UEFI Secure Boot увімкнено.

Найпростіший спосіб виправити цю проблему - відключити безпечне завантаження в налаштуваннях UEFI (BIOS).

У більшості випадків ви можете потрапити в налаштування UEFI за допомогою меню grub. Натисніть ESCкнопку під час завантаження, увійдіть у меню grub та виберіть Налаштування системи. Параметр "Захищене завантаження" повинен бути в розділі "Захист" або "Завантаження" УЄФІ.

Ви можете потрапити в UEFI безпосередньо, але це залежить від вашого обладнання. Прочитайте комп'ютерний посібник, щоб дізнатися, як туди дістатися. Це може бути Delабо F2при завантаженні, або щось інше.

Альтернативний спосіб - відключити використання безпечного завантаження mokutil.

Оскільки збірка ядра Ubuntu 4.4.0-21.37, це можна виправити запустивши

sudo apt install mokutil
sudo mokutil --disable-validation

Знадобиться створити пароль. Пароль повинен бути не менше 8 символів. Після перезавантаження UEFI запитає, чи потрібно змінити налаштування безпеки. Виберіть "Так".

Тоді вам буде запропоновано ввести створений раніше пароль. Деякі вбудовані програми UEFI просять не повний пароль, а ввести деякі символи, наприклад 1-й, 3-й тощо. Будьте уважні. Деякі люди цього не розуміють. Я не отримав це з першої спроби ;-)

Оновлення: тепер ця конфігурація ядра включена у всіх підтримуваних ядрах Ubuntu. Зачеплені Ubuntu 16.04, 15.10 та 14.04.


Це не працює для мене. @Sputnik відповідає. Але все ж я хотів би знати, чому mokutil запитує у мене пароль і коли мені це потрібно?
Альвін Кеслер

8
@AlwinKesler Він запитує пароль, який він буде підтверджений після перезавантаження, перш ніж зміни в базі даних MOK будуть фактично здійснені. Без цього негідний процес може змінити ключі в базі даних MOK, які набувають чинності після наступної перезавантаження. Крім того, тепер платформа "знає", що особа, яка вимагає зміни, - це та сама особа, яка фізично присутня після перезавантаження, і, таким чином, буде прийнята апаратних заходів безпеки, таких як фізичний доступ до машини та знання системного пароля часу завантаження. .
zwets

@ Pilot6: Я все ще перебуваю на Ubuntu 14.04 LTS через деякі технічні проблеми. Дуже дякую за оновлення відповіді.
Раві Джоші

3
Працював для мене на Ubuntu 18.04. Я не міг за все життя зрозуміти, чому встановлення драйверів nvidia не спрацювало жодними засобами, або навіть шляхом повернення до 16.04. Гах! Це і виправило. Стільки витрачено часу.
Нейт

1
Моя система Ubuntu була дуже млявою. Мало сенсу, оскільки це був абсолютно новий ноутбук. Тепер я розумію, що процесор робив усе, і моя відеокарта весь час простоювала. Це посилання також допомогло - linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04
Пітер Дрінан

32

Як запропонував користувач @zwets, тут я копіюю (з правками) відповідь :

Починаючи з версії ядра 4.4.0-20, було застосовано, що непідписані модулі ядра заборонятимуться працювати з увімкненою безпечною завантаженням. Якщо ви хочете зберегти захищене завантаження, а також запустити ці модулі, наступним логічним кроком є підписання цих модулів.

Тож давайте спробуємо.

  1. Створіть ключі підписання

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
    
  2. Підпишіть модуль

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
    

Примітка 1 : Для одного драйвера / модуля /path/to/moduleможе бути підписано кілька файлів, тому, можливо, їх потрібно замінити $(modinfo -n <modulename>), наприклад$(modinfo -n vboxdrv)

Примітка 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/moduleце альтернатива, якщо sign-fileвона недоступна.

  1. Зареєструйте ключі для безпечного завантаження

    sudo mokutil --import MOK.der
    

    Введіть пароль для подальшого використання після перезавантаження

  2. Rebootі дотримуйтесь інструкцій для реєстрації MOK (ключ власника машини). Ось зразок із малюнками. Система перезавантажиться ще один раз.

Якщо ключ було зареєстровано належним чином, він відобразиться в розділі "Внизу" sudo mokutil --list-enrolled.

Будь ласка, дайте мені знати, чи працювали б ваші модулі таким чином на Ubuntu 16.04 (я вважаю, на ядрі 4.4.0-21).

Ресурси: Детальна стаття на веб-сайті для реалізації Fedora та Ubuntu підписання модуля. (вони над цим працювали) ;-)

Додатковий ресурс: Я створив сценарій bash для власного використання при кожному virtualbox-dkmsоновленні та перезаписі підписаних модулів. Ознайомтесь з моїм vboxsignспочатку на GitHub .

Додаткова примітка для безпеки (додатково): :-)

Оскільки приватний ключ, який ви створили ( MOK.privу цьому прикладі), може використовувати кожен, хто може мати доступ до нього, то це є безпечною практикою. Ви можете chmodце зашифрувати ( gpg), або зберегти в іншому місці безпеки (r). Або, як зазначено в цьому коментарі , видаліть параметр -nodesна кроці № 1. Це зашифрує ключ за допомогою парольної фрази.


У Ubuntu 14.10 я продовжував бачити "необхідний ключ недоступний", намагаючись встановити драйвер широкоформатного зв’язку, зібраний з джерела, незважаючи на попередню реєстрацію ключа та підписання драйвера. Відключення перевірки спрацювало.
Марк

1
Це працювало для мене для VirtualBox та Ubuntu 16.04.
YtvwlD

1
На етапі 3 я отримую таку помилку: "Змінні EFI не підтримуються в цій системі". "dmesg" не має записів efi ("dmesg | grep efi" не має результатів) Що ще я можу зробити? Спасибі
musbach

Ви можете замінити шлях на $ (modinfo -n namename)
Шейн

У Ubuntu 18.04 тут модуль insmod для talpa_syscallhook.ko продовжує говорити "Необхідний ключ недоступний", незважаючи на те, що я підписав цей модуль, і всі інші модулі в одному каталозі для Sophos AV на всякий випадок. Ключ успішно зареєстрований, оскільки я його бачу, коли я перелічу всі мок-ключі. Будь-які ідеї, як діяти далі?
Fran Marzoa

6

Ви можете відключити безпечне завантаження (UEFI) у BIOS, виконавши такі дії:

  1. Перезавантажте машину та увійдіть у меню BIOS (у моєму випадку натискаючи F2)

  2. Шукайте безпечне завантаження та перейдіть на Legacy

На материнській платі ASUS:

  • Перейдіть до розширеного режиму (F7)
  • Перейдіть у параметр Захищене завантаження у розділі завантаження
  • Змініть "Режим Windows UEFI" на "Інша ОС"
  • Збережіть і перезапустіть, щоб застосувати налаштування (F10)

2
Безпечна завантаження та "Спадщина" - це різні налаштування.
Пілот6

Але якщо у вас увімкнено "застаріле завантаження" замість UEFI, чи означає це, що безпечне завантаження не ввімкнено?
Надзвичайний

@ Супернормальне, так, це я розумію.
Sputnik

3

Ви також можете вимкнути безпечне завантаження під час роботи з підписом sudo update-secureboot-policy. Ця вікі-сторінка пояснює цей метод:

  • Відкрийте термінал (Ctrl + Alt + T) та виконайте sudo update-secureboot-policy і виберіть Так.
  • Введіть тимчасовий пароль від 8 до 16 цифр. (Наприклад, 12345678, ми використаємо цей пароль пізніше
  • Знову введіть той самий пароль для підтвердження.
  • Перезавантажте систему та натисніть будь-яку клавішу, коли ви побачите синій екран (управління MOK
  • Виберіть Змінити стан захищеного завантаження
  • Введіть пароль, який ви обрали на кроці 2, і натисніть Enter.
  • Виберіть Так, щоб вимкнути захищене завантаження під шифрованим підписом.
  • Натисніть клавішу Enter, щоб закінчити всю процедуру.

Ви все ще можете ввімкнути Безпечне завантаження знову підписаним. Просто виконати

sudo update-secureboot-policy --enable і виконайте наведені вище дії

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.