SLES 15에 보안 부팅을 사용하여 사용자 지정 커널 모듈을 설치하는 방법

Secure Boot가 활성화된 SLES 15에서 사용자 지정 커널 모듈을 로드하려면, 실행할 커널 버전에 맞춰 모듈을 빌드하고, 완성된 .ko파일에 신뢰할 수 있는 서명 인증서로 서명한 다음, 해당 인증서를 MOK(Machine Owner Key)로 등록하고, 마지막으로 모듈을 로드해야 합니다 modprobe. MOK는 SUSE의 shim과 Linux 커널이 Secure Boot 모듈 검증을 위해 신뢰할 수 있는 로컬에서 관리되는 인증서입니다. 서명 거부 문제를 해결하기 위해 Secure Boot를 끄지 마십시오. 아래 절차는 시스템을 제어하고 재부팅 시 키 등록을 승인할 수 있는 관리자를 위한 것입니다.

이 가이드는 SUSE의 SLES 15 SP7 관리 문서 및 SUSE의 커널 모듈 패키징 지침(2026년 10월 6일 기준)을 따릅니다. 명령어에 사용된 acme_driver모듈 이름은 예시이며, .ko필요한 경우 접미사를 제외한 실제 모듈 이름으로 대체하십시오. 다음은 명령어 예시이며, 테스트된 호스트의 출력 결과가 아닙니다.

mokutil을 사용하여 Secure Boot를 확인하고 uname을 사용하여 실행 중인 SLES 커널을 식별하는 터미널 명령 예시입니다.
모듈 빌드 전 사전 검사 명령 예시: 보안 부팅 상태를 확인하고 정확한 커널 릴리스 버전을 기록합니다.

이 방법이 적합한 경우는 언제일까요?

실행 중인 커널과 별도로 제공되는 사용자 정의 모듈(아웃오브트리 모듈)의 경우, 대상 SLES 커널용 빌드를 다시 빌드하거나 얻을 수 있고 서버에 인증서를 등록할 수 있다면 이 방법을 사용하십시오. 이 방법은 SUSE Secure Boot 및 shim 경로를 통해 부팅하는 시스템에 적용됩니다. 공급업체에서 공식 SLES 15 드라이버 패키지를 제공하는 경우, 해당 패키지에서 지원하는 설치 및 서명 지침을 먼저 따르십시오. 공급업체 패키지는 수동으로 복사한 것보다 커널 호환성 및 업데이트를 더 잘 처리할 수 있습니다.

보안 부팅(Secure Boot)은 부팅 체인을 검증하며, 커널은 해당 정책에 따라 로드 가능한 모듈의 서명도 확인합니다. 모듈이 서명되었더라도 다른 커널 ABI를 대상으로 하거나, 누락된 심볼에 의존하거나, 잘못된 아키텍처용으로 빌드된 경우 로드에 실패할 수 있습니다. 반대로, 커널과 일치한다고 해서 서명되지 않은 모듈이 신뢰할 수 있는 것은 아닙니다. 서명은 신뢰도를 확보하는 것이지, 호환성을 보장하거나 코드의 안전성을 인증하는 것은 아닙니다.

시작하기 전에

  • 관리자 계정을 사용하고 유지 관리 기간이 있는지 확인하십시오. MOK 등록에는 재부팅과 MokManager에서의 승인 작업이 필요하며, 일반적으로 로컬 또는 원격 콘솔을 통해 수행됩니다.
  • uname -r`knockdown` 및 `secure Boot` 명령어를 사용 하여 실행 중인 커널과 보안 부팅 상태를 확인하십시오 mokutil --sb-state. 해당 커널 버전에 맞는 커널 개발 파일과 툴체인을 사용하여 모듈을 빌드하십시오. 패키지 이름과 필요한 파일은 SLES 서비스 팩, 커널 버전 및 빌드 방법에 따라 다르므로 대상 시스템에서 활성화된 저장소를 확인하여 검증하십시오.
  • 개인 서명 키를 어디에 저장할지 결정하십시오. 운영 환경에서는 조직에서 관리하는 서명 서비스 또는 승인된 키 관리 프로세스를 사용하십시오. 연구실 환경이나 단일 제어 호스트에서는 로컬에서 생성한 키를 사용하는 것이 실용적일 수 있습니다. 개인 키를 안전하게 보호하십시오. 서버는 등록을 위해 개인 키가 아닌 공개 인증서가 필요합니다.
  • 복구 경로, 모듈의 소스 코드 또는 공급업체 패키지, 그리고 정상적으로 작동하는 커널을 항상 준비해 두십시오. 하드웨어의 장치 및 커널 요구 사항을 완전히 이해하기 전까지는 운영 환경에 드라이버를 설치하지 마십시오.

1. 서명 키와 공개 인증서를 생성합니다.

보호된 서명 시스템에서 개인 키와 DER로 인코딩된 X.509 인증서를 생성합니다. SUSE의 커널 모듈 패키징 지침에서는 codeSigning현재 SLES 15 서비스 팩에서 확장 키 사용을 권장합니다. 이 예제에서는 OpenSSL과 설명적인 인증서 이름을 사용합니다.

openssl req -new -x509 -newkey rsa:2048 -sha256 \
  -keyout module-signing.key \
  -out module-signing.der -outform DER -nodes \
  -days 4745 -addext "extendedKeyUsage=codeSigning" \
  -subj "/CN=Custom Module Signing/"
chmod 600 module-signing.key

이 -nodes옵션을 선택하면 개인 키가 암호화되지 않은 상태로 저장되므로 파일 권한 및 저장 제어가 중요합니다. 해당 개인 키를 범용 서버에 복사하거나 패키지에 포함시키지 마십시오. 조직 정책에서 암호화된 키, 하드웨어 기반 서명, 키 순환 또는 다른 인증서 수명 주기를 요구하는 경우 해당 정책 및 서명 도구의 요구 사항을 준수하십시오. module-signing.der공개 키를 등록할 시스템으로만 전송하십시오.

OpenSSL 코드 서명 인증서 명령과 개인 키에 대한 제한적인 권한을 보여주는 예시 터미널 화면입니다.
인증서 생성 및 키 권한 설정 명령 예시입니다. 개인 키는 접근이 통제된 상태로 유지해야 합니다.

2. 대상 커널용 모듈을 빌드하고 서명합니다.

`build` 명령어 로 표시된 정확한 커널 릴리스 버전을 기준으로 모듈을 빌드하십시오 uname -r. 소스 프로젝트의 빌드 지침에 따라 필요한 컴파일러, 헤더 및 구성이 결정됩니다. 모든 사용자 정의 모듈에 맞는 단일 빌드 명령은 없습니다. 커널 불일치를 진단해야 하는 경우 ` build` 명령어 vermagic로 결과를 확인하십시오.modinfo

컴파일 및 패키징 또는 스트리핑 단계를 거친 후 최종 모듈 파일에 서명하십시오. SUSE는 서명 도우미에 대한 문서를 다음 링크에서 제공합니다 /usr/lib/rpm/pesign/kernel-sign-file. 다음 예에서는 PKCS#7 형식과 SHA-256 다이제스트를 사용합니다.

/usr/lib/rpm/pesign/kernel-sign-file -i pkcs7 sha256 \
  module-signing.key module-signing.der acme_driver.ko

해당 헬퍼는 시스템의 SUSE 서명 통합에서 사용 가능해야 합니다. 헬퍼가 없는 경우, 임의의 서명 명령을 사용하는 대신 공식 SLES/KMP 문서와 지원되는 서명 설정이 활성화된 저장소를 확인하십시오. 모듈 서명은 파일에 추가됩니다. 서명 후에는 모듈을 삭제, 편집, 재압축하거나 다른 방식으로 변경하지 마십시오. 이러한 변경은 서명을 무효화할 수 있습니다. 최종 서명 단계를 다시 수행할 수 있도록 원본 빌드 아티팩트를 보관하십시오.

예시: SUSE kernel-sign-file 명령어를 사용하여 acme_driver.ko 파일에 PKCS7 SHA-256 서명을 하는 방법
SUSE 서명 도우미는 보호된 개인 키와 해당 공개 인증서를 사용하여 완성된 모듈 파일에 서명합니다.

3. 공적 인증서를 MOK로 등록하십시오.

SLES 서버에서 module-signing.der루트 사용자가 읽을 수 있는 위치에 공개 인증서를 배치한 다음 등록 대기열에 추가합니다.

mokutil --root-pw --import module-signing.der
mokutil --list-new

SUSE 문서 --root-pw에서는 루트 암호를 사용하여 보류 중인 등록을 승인하는 방법을 설명합니다. 가져오기 명령은 인증서를 대기열에 추가하며 즉시 등록하지 않습니다. 서버를 재부팅하십시오. MokManager에서 " 디스크에서 키 등록"을 선택 하고 인증서를 선택한 다음 등록을 확인하고 요청된 승인을 완료하십시오. 메뉴 문구는 shim/MokManager 버전에 따라 약간씩 다를 수 있습니다. 등록 화면에 액세스할 수 없는 경우 부팅 경로를 확인하고 콘솔 액세스를 준비하십시오. 가져오기 명령이 성공했다고 해서 인증서가 등록되었다고 가정하지 마십시오.

서버가 부팅된 후 등록된 목록에 키가 나타나는지 확인하십시오.

mokutil --list-enrolled
mokutil을 사용하여 DER 인증서를 가져오고 보류 중인 MOK 항목을 나열하는 터미널 시퀀스 예시입니다.
가져오기 기능은 재부팅 시 검토할 인증서를 대기열에 추가하고, mokutil --list-new보류 중인 등록 요청을 표시합니다.
디스크에서 등록 키를 선택하고 확인 메시지가 표시되는 MokManager 등록 화면
재부팅 시 MokManager는 권한 있는 운영자가 승인해야 하는 키 등록 옵션과 확인 단계를 표시합니다.

4. 모듈을 설치하고, 모듈 종속성을 새로 고친 후 로드합니다.

서명된 파일을 실행 중인 커널의 extra-modules 디렉터리에 복사하고, 종속성 맵을 새로 고친 다음, 이름으로 모듈을 요청하십시오. 부팅된 커널이 다른 경우 실제 커널 릴리스 버전으로 바꿔야 합니다.

release=$(uname -r)
install -D -m 0644 acme_driver.ko \
  "/lib/modules/$release/extra/acme_driver.ko"
depmod -a "$release"
modprobe acme_driver

modprobe일반적으로 모듈 종속성을 해결해 주기 때문에 보다 선호됩니다 insmod. 드라이버가 제공하는 실제 장치 또는 기능을 테스트하십시오. 명령 실행이 성공했다고 해서 하드웨어가 제대로 작동하는 것은 아닙니다. 모듈을 부팅 시 로드하려면 `.config.js`와 같은 파일에 모듈 이름을 별도의 줄에 추가하십시오 /etc/modules-load.d/acme_driver.conf. SLES는 이러한 구성 파일에 systemd의 모듈 로딩 메커니즘을 사용합니다.

현재 커널의 extra 디렉터리에 서명된 모듈을 설치하고, depmod를 실행하고, modprobe를 호출하는 터미널 명령 예시입니다.
해당 커널 릴리스에 서명된 모듈을 설치하고, 종속성 정보를 다시 빌드한 다음, .을 사용하여 로드합니다 modprobe.

5. 신뢰 경로를 확인하고 오류를 해결합니다.

유용한 점검 사항은 다음과 같습니다.

mokutil --list-enrolled
modinfo -F signer /lib/modules/$(uname -r)/extra/acme_driver.ko
lsmod | grep acme_driver
journalctl -k -b | tail -n 80

modinfo -F signer이 명령은 모듈에 내장된 서명자 메타데이터를 표시합니다. 하지만 이것만으로는 인증서가 등록되었거나 실행 중인 커널이 서명을 수락했음을 증명할 수 없습니다. modprobe보안 부팅이 활성화된 상태에서 성공적으로 서명이 완료되었는지 확인하고, 커널 로그를 검사하고 장치가 정상적으로 작동하는지 확인하는 것이 더 유용한 증거입니다. 그림에 표시된 터미널 출력은 명령 및 예시 출력의 예시일 뿐이며, 이 글을 위해 수행된 테스트 보고서가 아닙니다.

징후확인해야 할 사항
Key was rejected by service또는 서명 관련 로드 오류이 모듈에 서명한 인증서가 등록되어 있는지 확인하십시오 mokutil --list-enrolled. 모듈이 마지막 수정 후에 서명되었는지 확인하십시오. 검토하십시오 journalctl -k -b.
Invalid module format모듈의 를 vermagic와 비교하십시오 uname -r. 실행 중인 커널과 해당 커널 버전에 맞게 다시 빌드하십시오.
Unknown symbol또는 해결되지 않은 종속성일치하는 빌드 환경과 필요한 보조 모듈을 확인하고 depmod -a설치 후 다시 실행하십시오.
Module not foundmodprobe파일 이름, 모듈 이름, 커널별 대상 디렉터리 및 종속성 맵을 확인하십시오. 일반적 으로 전달되는 이름에는 가 생략됩니다 .ko.

SUSE는 모듈 지원 여부도 추적하며, 지원되지 않는 모듈을 로드하면 커널의 지원 상태 또는 오염 상태에 영향을 미칠 수 있습니다. 이 정책은 서명 검증과는 별개입니다. 지원되지 않는 모듈 설정을 변경해도 서명 키가 등록되지 않으며 거부된 서명을 복구하지도 않습니다. 지원되는 운영 시스템에서 이 정책을 변경하기 전에 SUSE의 지원 지침을 검토하십시오.

lsmod 명령어를 사용하여 등록된 MOK, 모듈 서명자 메타데이터 및 모듈 이름을 보여주는 터미널 확인 예시입니다.
등록된 키 목록, 서명자 메타데이터, 로드된 모듈 목록 및 커널 로그를 함께 사용하십시오. 단 하나의 검사만으로는 전체 신뢰 및 호환성 체인을 입증할 수 없습니다.

커널 업데이트 및 반복 배포를 계획하십시오.

한 커널 릴리스용으로 빌드된 모듈이 다음 릴리스와 자동으로 호환되는 것은 아닙니다. 커널 업데이트 후에는 해당 커널에 맞는 빌드 환경을 설치하고, 새 커널 ABI에 맞게 모듈을 다시 빌드하고, 최종 파일에 서명한 다음, 해당 커널의 모듈 트리에 설치하고, 종속성 정보를 새로 고쳐야 합니다. 서명 인증서가 신뢰할 수 있는 상태로 유지되는 경우 일반적으로 다시 등록할 필요가 없습니다. 교체 또는 갱신된 인증서는 별도의 등록 및 승인이 필요합니다. 자동 부팅 로딩을 사용하기 전에 새 커널과 모듈을 함께 테스트하십시오.

정기적인 업데이트를 거쳐야 하는 시스템이나 드라이버의 경우, 드라이버 및 지원 모델에 맞는 SUSE의 커널 모듈 패키지(KMP) 방식과 같은 반복 가능한 패키징 워크플로를 사용하십시오. 패키징을 통해 커널별 빌드 및 서명 단계를 체계화할 수 있지만, 올바른 키 보호, 모듈 호환성, MOK 신뢰 및 업데이트 테스트의 필요성을 없애는 것은 아닙니다. 정확한 SLES 15 서비스 팩 및 조직에서 지원하는 커널 수명 주기에 대한 자세한 내용은 설명서를 참조하십시오.

acme-driver를 포함한 modules-load 구성 예시와 systemd 모듈 로딩 상태를 보여주는 터미널 화면입니다.
한 줄짜리 /etc/modules-load.d항목으로 모듈이 재구축되고 설치된 커널에 대해 서명된 후 부팅 시 로드되도록 요청할 수 있습니다.

공식 참고 자료

댓글 남기기

손실된 파티션과 하드 디스크 데이터를 안전하게 복구하는 방법

손실된 파티션과 하드 디스크 데이터를 안전하게 복구하는 방법

TestDisk와 PhotoRec을 사용하여 손실된 파티션과 파일을 복구하는 방법을 알아보세요. 원본 드라이브를 보호하고 안전하게 스캔한 다음 복구된 데이터를 다른 디스크에 저장하세요.

리눅스 데스크톱에서 QR 코드를 스캔하는 방법

리눅스 데스크톱에서 QR 코드를 스캔하는 방법

웹캠이나 이미지 파일을 사용하여 CoBang으로 Linux에서 QR 코드를 스캔하세요. Flatpak 카메라 접근 관련 설치 옵션, 설정 단계 및 문제 해결 방법을 참조하세요.

Cameractrls를 사용하여 Linux에서 웹캠 설정을 변경하는 방법

Cameractrls를 사용하여 Linux에서 웹캠 설정을 변경하는 방법

Cameractrls를 사용하여 Linux에서 웹캠 설정을 변경하세요. 노출, 색상, 깜빡임 감소 및 기타 지원되는 제어 기능을 조정하고 호환되는 비디오 모드를 확인하세요.

Linux에 PhpStorm을 설치하는 방법: Toolbox, Tar.gz, Snap 및 AUR

Linux에 PhpStorm을 설치하는 방법: Toolbox, Tar.gz, Snap 및 AUR

Linux에 PhpStorm을 설치하려면 JetBrains Toolbox 또는 독립 실행형 tar.gz 아카이브를 사용하세요. Snap 및 Arch AUR 옵션도 제공됩니다. Java는 이미 포함되어 있습니다.

리눅스에 Cisco Packet Tracer를 설치하는 방법

리눅스에 Cisco Packet Tracer를 설치하는 방법

Cisco Packet Tracer 9.0.1 for Ubuntu 64비트 버전을 다운로드하고, APT를 사용하여 DEB 패키지를 설치한 다음, 터미널에서 라이선스에 동의하고 로그인하여 실습을 시작하십시오.

XFCE 4에서 듀얼 패널을 설정하는 방법

XFCE 4에서 듀얼 패널을 설정하는 방법

각 디스플레이마다 별도의 XFCE 4 패널을 생성하고, 두 번째 패널을 올바른 출력에 할당하고, 위치와 크기를 조정한 다음, 필요한 실행기와 상태 항목을 추가합니다.

리눅스에서 CD-ROM을 ISO 파일로 백업하는 방법

리눅스에서 CD-ROM을 ISO 파일로 백업하는 방법

GNOME Disks 또는 dd 명령어를 사용하여 Linux에서 CD-ROM ISO 파일을 생성합니다. 광학 드라이브를 식별하고, 복사 과정을 모니터링하고, 이미지 유효성을 검사하고, 손상된 디스크나 오디오 디스크에 다른 도구가 필요한 경우를 알 수 있습니다.

리눅스에서 GIMP를 사용하여 이미지를 잘라내는 방법

리눅스에서 GIMP를 사용하여 이미지를 잘라내는 방법

GIMP를 사용하여 Linux에서 사진 배경 제거하기: 피사체를 따라 그리고, 선택한 배경을 삭제하고, 투명도를 유지한 다음, 재사용 가능한 PNG 파일로 내보낼 수 있습니다.

FlightGear 무료 다운로드: 공식 설치 가이드

FlightGear 무료 다운로드: 공식 설치 가이드

FlightGear를 공식 사이트에서 무료로 다운로드하세요. Windows, macOS, Linux 패키지를 비교하고, 데이터 파일을 설치한 후 첫 비행을 시작하세요.

Google Tasks 데스크톱 애플리케이션: 컴퓨터에서 사용하는 방법

Google Tasks 데스크톱 애플리케이션: 컴퓨터에서 사용하는 방법

브라우저에서 Google Tasks를 열거나, Chrome 바로가기 또는 앱 스타일 실행을 추가하고, 캘린더 및 Gmail을 통해 날짜별 할 일을 관리하세요.