커널 모듈 서명에 사용된 키 쌍의 공개 키를 system_keyring에 추가하고 싶습니다. 그러나 문제가 있습니다.
명령을 통해 cat /proc/keys | grep system_keyring
system_keyring 항목(ID)을 얻었습니다. 그러나 다음을 사용하여 공개 키를 추가하려고 하면 keyctl padd asymmetric "" 0xXXXXXXXX</test/signing_key.x509
"권한 거부" 오류가 발생합니다.
이는 "module_signing.txt"에 설명된 제한 사항 때문인 것 같습니다.https://01.org/linuxgraphics/gfx-docs/drm/admin-guide/module-signing.html:
하지만 커널에서는 .system_keyring에만 키를 추가할 수 있다는 점에 유의하세요.만약에새 키에 대한 X.509 래퍼는 키가 추가될 때 .system_keyring에 이미 있던 키로 유효하게 서명됩니다.
그러나 이미 .system_keyring에 있는 키를 사용하여 "X.509 래퍼"에 서명하는 방법을 설명하는 문서를 찾을 수 없습니다.
그리고 그 키링에 있는 키는 그냥 공개키인 것 같아요. 따라서 키링에서 공개 키를 추출하고 해당 공개 키를 사용하여 "X.509 래퍼"에 서명할 수 있더라도 작동하지 않을 것이라고 생각합니다.
어쨌든 여기에는 도움이 필요합니다. 아니면 커널을 다시 빌드하지 않고도 RedHat에서 서명하고 사용자 설치에 설치할 수 있도록 커널 모듈을 RedHat에 제출하는 방법에 대한 힌트를 줄 수 있는 것이 있다고 하더라도 어떻게 해야 할까요?
답변1
시스템 키링은 다음 다섯 가지 소스에서 콘텐츠를 가져옵니다.
- 컴파일 타임에 커널에 내장된 키(분명히 재컴파일 없이는 변경할 수 없습니다)
- UEFI 보안 부팅 변수
db
- 펌웨어에 따라 이 변수를 변경하지 못할 수도 있습니다. - UEFI 보안 부팅 변수
dbx
- 이전 변수와 동일하지만 블랙리스트이므로 여기에 키를 추가하고 싶지 않습니다. - 내장 키
shim.efi
- 재컴파일하지 않고는 변경할 수 없으며 이미 보안 부팅을 제어할 수 있는 경우가 아니면 나중에 심에 다시 서명해야 할 수도 있습니다.PK
= 너무 많은 문제 - UEFI 변수
MOK
(byshim.efi
) - 이것이 아마도 최선의 희망일 것입니다.
키를 MOK로 가져오려면 먼저 해당 키가 shim.efi
부팅 프로세스에 참여하는지 확인해야 합니다(참고자료 참조 efibootmgr -v
).
그런 다음 DER 형식의 모듈에서 서명한 키/인증서를 얻고 다음을 mokutil
사용하여 가져오기 프로세스를 시작합니다.
mokutil --import your_signing_key.pub.der
이 명령은 새 가져오기 비밀번호를 설정하라는 메시지를 표시합니다. 이 비밀번호는 다음 단계에서 사용되며 이전에 존재했던 비밀번호가 아닙니다. 평소와 마찬가지로 새 비밀번호를 설정할 때 mokutil
비밀번호를 두 번 입력하라는 메시지가 표시됩니다.
그런 다음 다음에 시스템을 재부팅하면 shim.efi
새 MOK 키를 가져올 준비가 된 것을 볼 수 있습니다.가져오기 비밀번호를 입력하라는 메시지가 표시됩니다.이전 단계에서 설정했습니다. 이 작업이 한 번 완료되면 새 키가 UEFI MOK 변수에 영구적으로 저장되고 커널이 자동으로 이를 시스템 키링에 포함합니다.
UEFI를 사용하지 않는 경우 커널을 다시 컴파일하지 않으면 시스템 키링에 새 키를 추가할 수 없습니다. 그러나 반면에 보안 부팅이 활성화되지 않은 경우 커널은 서명이 없거나 서명을 확인할 수 없는 커널 모듈을 로드하도록 허용합니다. 이는 단순히 커널 오염 플래그를 설정하여 비릴리스 커널임을 표시하기만 합니다. 모듈이 로드되었습니다. 짐을 실은.