SecureBoot가 활성화된 Debian에서 서명된 VirtualBox 커널 모듈을 로드할 수 없는 이유는 무엇입니까?

SecureBoot가 활성화된 Debian에서 서명된 VirtualBox 커널 모듈을 로드할 수 없는 이유는 무엇입니까?

Debian 테스트 및 SecureBoot를 활성화한 후:

vboxconfig명령 출력에 표시된 대로 VirtualBox 모듈에 서명해야 합니다 .

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: You must sign these kernel modules before using VirtualBox:
  vboxdrv vboxnetflt vboxnetadp
See the documenatation for your Linux distribution..
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.  If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.

따르다SecureBoot에 관한 데비안 위키나는 그랬다:

# openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=My Name/" -nodes

# mokutil --import MOK.der // prompts for one-time password

# mokutil --list-new // recheck your key will be prompted on next boot

<rebooting machine then enters MOK manager EFI utility: enroll MOK, continue, confirm, enter password, reboot>

# dmesg | grep cert // verify your key is loaded

모듈에 서명합니다.

# /usr/src/linux-headers-5.7.0-1-amd64/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der /lib/modules/5.7.0-1-amd64/misc/vboxdrv.ko

# /usr/src/linux-headers-5.7.0-1-amd64/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der /lib/modules/5.7.0-1-amd64/misc/vboxnetflt.ko

# /usr/src/linux-headers-5.7.0-1-amd64/scripts/sign-file sha256 /root/MOK.priv /root/MOK.der /lib/modules/5.7.0-1-amd64/misc/vboxnetadp.ko

참고: 모듈을 찾을 수 없기 vboxpci때문에 모듈에 서명하지 않았습니다 .sudo modinfo -n vboxpci

modinfo: ERROR: Module vboxpci not found.

vboxconfig나중에 루트로 다시 실행하려고 하면 모듈을 로드하지 못하기 때문에 동일한 결과를 얻습니다.

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: You must sign these kernel modules before using VirtualBox:
  vboxdrv vboxnetflt vboxnetadp
See the documenatation for your Linux distribution..
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.  If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.

참고: 모듈을 직접 로드하려고 하면 sudo modprobe vboxdrv다음 오류도 발생합니다.

modprobe: ERROR: could not insert 'vboxdrv': Operation not permitted

이 명령은 dmesg모듈이 서명되지 않았음을 보여줍니다.

[   35.668028] Lockdown: modprobe: unsigned module loading is restricted; see https://wiki.debian.org/SecureBoot
[   59.965757] Lockdown: modprobe: unsigned module loading is restricted; see https://wiki.debian.org/SecureBoot
[  247.249605] Lockdown: modprobe: unsigned module loading is restricted; see https://wiki.debian.org/SecureBoot

어떡해? ? ? SecureBoot를 비활성화하지 않습니까?

답변1

동일한 절차를 따랐고 동일한 문제가 발생했지만 왜 작동하지 않는지 알 수 없었습니다. 그런 다음 커널 모듈 재구축을 트리거하면서 모듈에 서명한 후 vboxconfig를 다시 실행하는 데 문제가 있다는 것을 깨달았습니다. "vboxdrv.sh: Building VirtualBox 커널 모듈."

이 시점에서 저는 모듈에 서명하고 modprobe를 사용하여 로드했는데, 아무런 문제 없이 로드되었습니다.

걱정하지 마십시오. vboxconfig를 처음 실행한 이후로 매번 수동으로 모듈을 로드할 필요는 없습니다. vboxconfig는 이미 설정을 완료했으며 다시 시작하기만 하면 됩니다(적어도 저에게는 효과가 있었습니다).

답변2

Fedora 34 및 VirtualBox 6.1.22의 경우 단계는 다음과 같습니다.

  1. VirtualBox 모듈 구축 sudo /sbin/vboxconfig

  2. openssl 설치 sudo dnf install openssl

  3. 키 생성 및 등록

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=My Name/" -nodes

sudo mokutil --import MOK.der

echo "Please reboot the machine"
  1. 재부팅하고 키가 BIOS에 등록되었는지 확인하세요. (3)단계에서 선택한 비밀번호가 필요합니다.

  2. VirtualBox 커널 모듈 서명

sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/misc/vboxdrv.ko
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/misc/vboxnetadp.ko
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/misc/vboxnetflt.ko
  1. VirtualBox 커널 모듈 로드
sudo modprobe vboxdrv
sudo modprobe vboxnetadp
sudo modprobe vboxnetflt

VirtualBox를 시작하면 작동합니다.

관련 정보