https://github.com/jakeday/linux-surface/blob/master/SIGNING.md 에는 커널 서명에 대한보다 구체적인 지침이 있습니다 (허용 된 답변에 링크 된 동일한 자습서에서 채택). 지침은 다음과 같이 완전히 재현됩니다.
보안 부팅을위한 사용자 정의 커널 서명
지침은 우분투 용이지만 부트 로더로 shim 및 grub을 사용하는 경우 다른 배포판에서도 유사하게 작동합니다. 배포판에서 shim (예 : Linux Foundation Preloader)을 사용하지 않는 경우 서명을 완료하는 비슷한 단계 (예 : LF Preloader 용 MokUtil 대신 HashTool)가 있거나 대신 shim을 설치하여 사용할 수 있습니다. shim 용 ubuntu 패키지는 shim-signed
이지만 올바르게 설치하는 방법을 알려주므로 부트 로더를 엉망으로 만들지 마십시오.
Ubuntu의 최신 GRUB2 업데이트 (2.02 + dfsg1-5ubuntu1) 이후 보안 부팅이 활성화되어있는 한 GRUB2는 더 이상 서명되지 않은 커널을로드하지 않습니다. Ubuntu 18.04 사용자는 grub-efi 패키지를 업그레이드하는 동안이 커널이 서명되지 않았으며 업그레이드가 중단된다는 알림을받습니다.
따라서이 문제를 해결하기위한 세 가지 옵션이 있습니다.
- 커널에 직접 서명하십시오.
- 배포판의 서명 된 일반 커널을 사용합니다.
- 보안 부팅을 비활성화합니다.
옵션 2와 3은 실제로 실행 가능하지 않기 때문에 커널에 직접 서명하는 단계입니다.
우분투 블로그 에서 수정 된 지침 . 팔로우하기 전에 / boot / EFI 디렉토리를 백업하여 모든 것을 복원 할 수 있습니다. 자신의 위험에 따라 다음 단계를 수행하십시오.
- 서명 키를 작성하기위한 구성을 작성하고 mokconfig.cnf로 저장하십시오.
# This definition stops the following lines failing if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3
string_mask = utf8only
prompt = no
[ req_distinguished_name ]
countryName = <YOURcountrycode>
stateOrProvinceName = <YOURstate>
localityName = <YOURcity>
0.organizationName = <YOURorganization>
commonName = Secure Boot Signing Key
emailAddress = <YOURemail>
[ v3 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment = "OpenSSL Generated Certificate"
세부 사항에 따라 모든 부품을 조정하십시오.
- 커널 서명을위한 공개 및 개인 키를 작성하십시오.
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- 키를 PEM 형식으로도 변환하십시오 (mokutil에는 DER 필요, sbsign에는 PEM 필요).
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- 심 설치 키를 등록하십시오.
sudo mokutil --import MOK.der
비밀번호를 묻는 메시지가 표시되면 비밀번호를 사용하여 다음 단계에서 키 선택을 확인하므로 아무거나 선택하십시오.
시스템을 다시 시작하십시오. MOKManager라는 도구의 블루 스크린이 나타납니다. "MOK 등록"을 선택한 다음 "키보기"를 선택하십시오. 2 단계에서 생성 한 키인지 확인한 후 프로세스를 계속 진행하고 4 단계에서 제공 한 암호를 입력해야합니다. 시스템 부팅을 계속하십시오.
다음을 통해 키가 등록되었는지 확인하십시오.
sudo mokutil --list-enrolled
- 설치된 커널에 서명하십시오 (/ boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surface에 있어야 함).
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
- 서명되지 않은 커널의 initram을 복사하면 서명 된 커널에 대한 initram도 있습니다.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- grub-config 업데이트
sudo update-grub
- 시스템을 재부팅하고 서명 된 커널을 선택하십시오. 부팅이 작동하면 서명되지 않은 커널을 제거 할 수 있습니다.
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
이제 시스템이 서명 된 커널에서 실행되고 GRUB2 업그레이드가 다시 작동합니다. 사용자 정의 커널을 업그레이드하려면 7 단계부터 다시 위 단계를 수행하여 새 버전에 쉽게 서명 할 수 있습니다. 따라서 MOK 키를 백업하십시오 (MOK.der, MOK.pem, MOK.priv).