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항목으로 모듈이 재구축되고 설치된 커널에 대해 서명된 후 부팅 시 로드되도록 요청할 수 있습니다.

공식 참고 자료

댓글 남기기

종속성 손상 없이 Debian 12를 Testing으로 마이그레이션하는 방법

종속성 손상 없이 Debian 12를 Testing으로 마이그레이션하는 방법

Debian 12 Bookworm 시스템을 Debian Testing으로 마이그레이션할 때 종속성 관련 문제를 최소화하세요. 지원되는 Bookworm-to-Trixie 마이그레이션 경로, APT 검사, 시뮬레이션 및 복구 방법을 알아보세요.

How to Register a SLES 15 Machine to SUSE Manager Offline

How to Register a SLES 15 Machine to SUSE Manager Offline

Register SLES 15 to SUSE Manager without Internet access using synchronized channels, a bootstrap repository, an activation key, and a verified Salt bootstrap workflow.

우분투 24.04에서 절전 모드 후 Wi-Fi 연결 끊김 문제를 해결하는 방법

우분투 24.04에서 절전 모드 후 Wi-Fi 연결 끊김 문제를 해결하는 방법

우분투 24.04에서 절전 모드 후 Wi-Fi 연결 끊김 문제 해결: 업데이트, 무선 차단 및 NetworkManager 확인, 절전 기능 테스트, 로그 검사 및 해결 방법 검증.

ALSA 설정 조정을 통해 Ubuntu 24.04의 소리 왜곡 문제를 해결하세요

ALSA 설정 조정을 통해 Ubuntu 24.04의 소리 왜곡 문제를 해결하세요

Ubuntu 24.04에서 발생하는 잡음, 윙윙거리는 소리, 왜곡된 소리를 해결하려면 ALSA 장치를 진단하고 WirePlumber 버퍼, 샘플 속도 및 ALSA 직접 설정값을 안전하게 조정하십시오.

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

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

SLES 15 커널 모듈에 사용자 지정 서명을 하고, MOK에 인증서를 등록하고, 보안 부팅에 로드하고, 결과를 확인하고, 커널 업데이트를 처리하는 방법을 알아보세요.

SLES 15 KVM 가상화 설정 및 VM 자동 시작 가이드

SLES 15 KVM 가상화 설정 및 VM 자동 시작 가이드

SLES 15에 KVM을 설정하고, libvirt 네트워킹 및 스토리지를 구성하고, 가상 머신을 생성하고, 자동 시작을 활성화하고, 호스트 재부팅 후 안정적인 시작을 확인합니다.

How to Configure a WireGuard Point-to-Site VPN Server on Debian 12

How to Configure a WireGuard Point-to-Site VPN Server on Debian 12

Configure a WireGuard point-to-site VPN on Debian 12 with wg-quick, IPv4 forwarding, nftables NAT, client profiles, systemd startup, and verification.

How to Harden SLES 15 for STIG Compliance: A Safe OpenSCAP Workflow

How to Harden SLES 15 for STIG Compliance: A Safe OpenSCAP Workflow

Audit SLES 15 against the current DISA STIG, review OpenSCAP findings, test remediations, and document exceptions before production rollout.

How to Configure SAP HANA Memory Limits on SUSE Linux Enterprise Server

How to Configure SAP HANA Memory Limits on SUSE Linux Enterprise Server

Learn how to set SAP HANA global and statement memory limits on SUSE Linux Enterprise Server, compare HANA limits with SUSE MemoryLow, and verify each change safely.

Gooroom OS 브라우저 격리 설정을 안전하게 구성하는 방법

Gooroom OS 브라우저 격리 설정을 안전하게 구성하는 방법

Gooroom OS 브라우저 격리 작동 방식, 신뢰 및 차단 URL 정책 준비, GPMS 구성 조정, 빌드 설정 검증에 대해 알아보세요.