타사 커널 모듈을 설치할 때 또는 커널 업그레이드 후에“필수 키를 사용할 수 없습니다”가 나타나는 이유는 무엇입니까?


79

이 문제는 보안 부팅이 활성화 된 UEFI 시스템에서만 발생합니다.

VirtualBox, Nvidia 또는 Broadcom 드라이버와 같은 DKMS 모듈을 설치하려고하면 설치되지 않으며 Required key not available시도 할 때 나타납니다 modprobe.

VirtualBox가로 vboxdrv드되지 않았다고 불평합니다 .

Broadcom wl드라이버는 lspci -k커널 모듈로 표시되지만 사용되지는 않습니다. sudo modprobe wl던졌습니다 Required key not available.

또한이 문제는 git 소스에서 일부 커널 모듈을 설치할 때 발생할 수 있습니다.

이 문제는 커널 업데이트 후 비활성화 된 무선 어댑터, 재부팅 후 검은 색 화면 등으로 나타날 수 있습니다.

어떻게 고칠 수 있습니까?


답변:


85

우분투 커널 4.4.0-20부터 EFI_SECURE_BOOT_SIG_ENFORCE커널 설정이 활성화되었습니다. UEFI 보안 부팅이 활성화 된 경우 서명되지 않은 타사 모듈을로드 할 수 없습니다.

이 문제를 해결하는 가장 쉬운 방법 은 UEFI (BIOS) 설정에서 보안 부팅비활성화하는 것 입니다.

대부분의 경우 grub 메뉴를 사용하여 UEFI 설정에 들어갈 수 있습니다. ESC부팅시 버튼을 누르고 grub 메뉴로 이동하여 System Setup을 선택하십시오. 보안 부팅 옵션은 UEFI의 "보안"또는 "부팅"섹션에 있어야합니다.

UEFI에 직접 액세스 할 수 있지만 하드웨어에 따라 다릅니다. 가는 방법을 보려면 컴퓨터 설명서를 읽으십시오. 그것은 할 수있다 Del, 또는 F2부팅, 또는 뭔가 다른합니다.

다른 방법은을 사용하여 보안 부팅을 비활성화하는 것 mokutil입니다.

우분투 커널 빌드 4.4.0-21.37부터는 다음을 실행하여 해결할 수 있습니다

sudo apt install mokutil
sudo mokutil --disable-validation

비밀번호를 만들어야합니다. 비밀번호는 8 자 이상이어야합니다. 재부팅하면 UEFI에서 보안 설정을 변경할 것인지 묻습니다. "예"를 선택하십시오.

그런 다음 이전에 만든 비밀번호를 입력하라는 메시지가 표시됩니다. 일부 UEFI 펌웨어는 전체 비밀번호를 요구하지 않지만 1, 3 등의 일부 문자를 입력하도록 요구합니다.주의하십시오. 어떤 사람들은 이것을 이해하지 못합니다. 나는 첫 시도에서 그것을 얻지 못했다. ;-)

업데이트 : 이제이 커널 구성은 지원되는 모든 Ubuntu 커널에서 활성화됩니다. 우분투 16.04, 15.10 및 14.04가 영향을받습니다.


이것은 나를 위해 작동하지 않습니다. @ 스푸트니크 답변이 않습니다. 그러나 여전히 mokutil이 암호를 요구하는 이유와 언제 필요한지 알고 싶습니다.
Alwin Kesler

8
@AlwinKesler MOK 데이터베이스에 대한 변경이 실제로 수행되기 전에 재부팅 후 유효성을 검사 할 암호를 요청합니다. 이것이 없으면 불량 프로세스가 MOK 데이터베이스의 키를 변경하여 다음에 다시 부팅 한 후에 적용됩니다. 또한 이제 플랫폼은 변경을 요청한 사람이 재부팅 후 물리적으로 존재하는 사람과 동일하다는 것을 '인식'하므로 시스템에 물리적으로 액세스하고 부팅 시간 시스템 암호를 아는 것과 같은 하드웨어 보안 조치를 통과했습니다. .
zwets

@ Pilot6 : 기술적 인 문제로 인해 여전히 Ubuntu 14.04 LTS에 있습니다. 답변을 업데이트 해 주셔서 감사합니다.
라비 Joshi

3
우분투 18.04에서 나를 위해 일했습니다. nvidia 드라이버 설치가 어떤 방법으로도 작동하지 않거나 16.04로 되돌려 진 이유를 알 수 없었습니다. 가! 이것은 그것을 고쳤다. 너무 많은 시간이 낭비되었습니다.
Nate

1
우분투 시스템은 정말 게으르다. 이것이 새로운 노트북 이었기 때문에 의미가 없습니다. 이제 CPU가 모든 일을하고 있고 비디오 카드가 항상 유휴 상태임을 알고 있습니다. 이 링크도 도움이되었습니다 -linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04
Peter Drinnan

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. RebootMOK (기계 소유자 키) 등록 지침을 따릅니다. 다음 은 사진 이 포함 된 샘플 입니다. 시스템이 한 번 더 재부팅됩니다.

키가 올바르게 등록 된 경우 키 아래에 표시됩니다 sudo mokutil --list-enrolled.

귀하의 모듈이 Ubuntu 16.04 (커널 4.4.0-21에서) 에서이 방식으로 실행되는지 알려주십시오.

리소스 : FedoraUbuntu 모듈 서명 구현대한 자세한 웹 사이트 기사 . (그들은 노력하고 있습니다) ;-)

추가 리소스 :virtualbox-dkms 업그레이드 할 때마다 본인이 사용할 bash 스크립트를 만들어서 서명 된 모듈을 덮어 씁니다. vboxsign원래 GitHub에서 확인하십시오 .

보안에 대한 추가 참고 사항 :

MOK.priv이 예에서 생성 한 개인 키 는 액세스 할 수있는 모든 사람이 사용할 수 있으므로 보안을 유지하는 것이 좋습니다. 당신은 할 수 있습니다 chmod그것은, (암호화 gpg)를, 또는 다른 곳에서 안전 (r)을 저장합니다. 또는 이 설명에 언급 된 대로 -nodes1 단계 에서 옵션 을 제거하십시오 . 그러면 암호로 키가 암호화됩니다.


우분투 14.10 에서는 키를 사전 등록하고 드라이버에 서명했지만 소스에서 컴파일 된 브로드 콤 드라이버 를 설치하려고하는 '필수 키를 사용할 수 없음'을 계속 보았습니다 . 유효성 검사를 비활성화했습니다.
Mark

1
이것은 VirtualBox 및 Ubuntu 16.04에서 저에게 효과적이었습니다.
YtvwlD

1
3 단계에서 다음 오류가 발생합니다. "이 시스템에서는 EFI 변수가 지원되지 않습니다." "dmesg"에 efi 항목이 없습니다 ( "dmesg | grep efi"에 결과가 없음). 다른 작업을 수행 할 수 있습니까? 감사합니다
musbach

경로를 $ (modinfo -n modulename)으로 대체 할 수 있습니다
Shane

우분투 18.04에서 talpa_syscallhook.ko 모듈에 대한 insmod 모듈은 해당 모듈에 서명 했음에도 불구하고 계속해서 "필수 키를 사용할 수 없습니다"라고 말하고 Sophos AV의 동일한 디렉토리에있는 다른 모든 모듈은 경우에 따라 표시됩니다. 모든 mok 키를 나열 할 때 볼 수 있으므로 키가 성공적으로 등록되었습니다. 진행하는 방법에 대한 아이디어가 있습니까?
Fran Marzoa

6

다음 단계에 따라 BIOS에서 보안 부팅 (UEFI)을 비활성화 할 수 있습니다.

  1. 컴퓨터를 재부팅하고 BIOS 메뉴로 들어갑니다 (필자의 경우 F2를 누름)

  2. 보안 부팅을 검색하고 레거시로 변경

ASUS 마더 보드에서 :

  • 고급 모드로 이동 (F7)
  • 부팅 섹션에서 보안 부팅 옵션으로 이동
  • "기타 OS"로 "Windows UEFI 모드"변경
  • 설정을 적용하기 위해 저장하고 다시 시작하십시오 (F10)

2
보안 부팅과 "레거시"는 다른 설정입니다.
Pilot6

그러나 UEFI 대신 "레거시 부팅"을 활성화 한 경우 보안 부팅이 활성화되어 있지 않습니까?
Supernormal

@Supernormal, 예, 이것이 내가 이해하는 것입니다.
스푸트니크

3

shim-signed running에서 보안 부팅을 비활성화 할 수도 있습니다 sudo update-secureboot-policy. 이 위키 페이지 는이 방법을 설명합니다.

  • 터미널을 열고 (Ctrl + Alt + T) sudo update-secureboot-policy를 실행 한 다음 예를 선택하십시오.
  • 8 ~ 16 자리의 임시 비밀번호를 입력하십시오. (예 : 12345678, 나중에이 암호를 사용합니다.
  • 동일한 비밀번호를 다시 입력하여 확인하십시오.
  • 블루 스크린이 표시되면 시스템을 재부팅하고 아무 키나 누르십시오 (MOK 관리
  • 보안 부팅 상태 변경을 선택하십시오.
  • 2 단계에서 선택한 비밀번호를 입력하고 Enter를 누르십시오.
  • shim-signed에서 보안 부팅을 비활성화하려면 예를 선택하십시오.
  • Enter 키를 눌러 전체 절차를 완료하십시오.

shim-signed에서 보안 부팅을 다시 활성화 할 수 있습니다. 그냥 실행

sudo update-secureboot-policy-활성화 한 다음 위의 단계를 수행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.