SLES 15 보안 부팅에 사용자 지정 커널 모듈 설치 및 서명

SUSE Linux Enterprise Server 15에서 타사 드라이버가 컴파일은 제대로 되지만 "필요한 키를 사용할 수 없습니다" 또는 "서비스에서 키를 거부했습니다"라는 오류와 함께 로드되지 않을 수 있습니다. UEFI 보안 부팅이 모듈 서명을 강제하는 경우, 해결 방법은 사용자 지정 커널 모듈에 신뢰할 수 있는 인증서로 서명하고, 해당 인증서를 MOK(Machine Owner Key) 관리 시스템에 등록한 다음, 보안 부팅을 비활성화하지 않고 모듈을 정상적으로 로드하는 것입니다.

kernel-default이 절차는 SUSE shim, 커널, 관리자 권한 및 신뢰할 수 있는 드라이버 소스를 사용하는 표준 SLES 15 UEFI 시스템을 가정합니다 . 사용자 지정 .ko모듈에 대한 내용이며, 대체 커널 서명이나 펌웨어 플랫폼 키 변경은 다루지 않습니다. 예제는 SLES 15 SP6/SP7 관리 모델을 따르므로, 설치된 서비스 팩에 따라 패키지 및 커널 버전이 다를 수 있으므로 해당 차이점을 확인하십시오.

1. 먼저 보안 부팅과 실행 중인 커널을 확인하십시오.

관리자 권한으로 로그인하여 실제로 부팅한 커널을 확인하십시오. 패키지 이름만 일치한다고 해서 해당 모듈이 해당 커널에 로드될 수 있다는 것을 증명할 수는 없습니다.

uname -r
mokutil --sb-state
ls -ld "/lib/modules/$(uname -r)/build"
터미널 화면에는 `uname -r` 명령어, `mokutil Secure Boot` 상태, 그리고 실행 중인 커널 빌드 디렉터리 확인 화면이 표시됩니다.
드라이버를 설치하거나 서명하기 전에 활성 커널 릴리스와 보안 부팅 상태를 확인하십시오.

보안 부팅이 활성화된 것으로 보고되는 경우 mokutil, 신뢰할 수 없는 서명이 키 관련 로드 실패의 원인일 가능성이 높습니다. 보안 부팅이 비활성화된 경우, 키를 생성하기 전에 다른 원인을 조사하십시오. 명시적인 커널 서명 강제 적용 또한 문제가 될 수 있습니다. 로드 실패 후 커널 로그에서 실제 거부 메시지를 확인하십시오.

sudo journalctl -k -b --no-pager | tail -n 50

설치하기 전에 후보 모듈을 검사하십시오. 예시 파일 이름 대신 실제 파일 이름을 사용하십시오. 파일 이름은 vermagic실행 중인 커널 릴리스 및 호환 빌드 속성과 일치해야 합니다.

modinfo -F name /path/to/mydriver.ko
modinfo -F vermagic /path/to/mydriver.ko
터미널 화면에 외부 커널 드라이버와 커널 서명 도구 경로에 대한 modinfo 목록 예시가 표시됩니다.
.ko 파일이 SLES 15와 일치한다고 가정하지 말고, 특히 vermagic 모듈의 메타데이터를 검토하십시오.

2. 지원되는 드라이버 패키지를 사용하거나 일치하는 모듈을 빌드하십시오.

먼저 하드웨어 또는 소프트웨어 공급업체에 SLES 호환이 가능하고 이미 서명된 커널 모듈 패키지(KMP)를 요청하십시오. 이는 바이너리를 직접 설치하는 것보다 바람직합니다. 공급업체에서 커널 업데이트 처리 및 문서화된 인증서 등록 프로세스를 제공할 수 있기 때문입니다. 모든 보안 부팅 시스템에서 공급업체 서명이 자동으로 신뢰되는 것은 아닙니다.

드라이버를 직접 빌드해야 하는 경우, 실행 중인 커널에 맞는 개발 파일을 설치하십시오. kernel-default일반적인 SLES 패키지에는 기본 커널 개발 패키지, 커널 개발 파일 및 빌드 도구가 포함됩니다. 저장소 가용성 및 버전은 등록 여부와 활성화된 SLES 모듈에 따라 달라집니다.

sudo zypper install gcc make openssl mokutil kernel-devel kernel-default-devel
rpm -q kernel-default-devel kernel-devel
readlink -f "/lib/modules/$(uname -r)/build"
SLES 스타일 터미널에 커널 개발 및 서명 필수 구성 요소의 zypper 설치 화면이 표시됩니다.
사용자 정의 모듈을 사용하기 전에 해당 커널 개발 패키지와 암호화 도구를 설치하십시오.

빌드 디렉터리가 없거나 개발 패키지가 다른 커널 릴리스를 대상으로 하는 경우, 먼저 패키지/커널 불일치를 해결하십시오. 새로 설치된 커널은 빌드 전에 재부팅이 필요할 수 있습니다.

신뢰할 수 있는 드라이버 소스 디렉터리에서 공급업체의 빌드 지침을 사용하십시오. 기존 kbuild 기반 모듈의 경우 아래 명령은 실행 중인 커널을 대상으로 빌드하며, 드라이버를 다운로드하거나 생성하지 않습니다.

cd /path/to/driver-source
make -C "/lib/modules/$(uname -r)/build" M="$PWD" modules
터미널 화면에는 실행 중인 SLES 커널을 대상으로 외부 커널 모듈을 컴파일하는 kbuild make 명령이 표시됩니다.
커널 빌드 트리와 드라이버 소스 디렉토리를 사용하여 일치하는 .ko 파일을 생성하십시오.

신뢰할 수 있는 공급업체에서 제공하는 호환 가능한 버전이 이미 있는 경우 컴파일을 건너뛰십시오 .ko. 잘못된 서명으로 모듈을 강제로 로드하지 마십시오 vermagic. 서명으로는 호환되지 않는 바이너리를 복구할 수 없습니다.

3. 서명 키를 생성하고 설치된 모듈에 서명합니다.

루트 사용자 전용 디렉터리에 전용 RSA 키와 X.509 인증서를 생성합니다. 공개 인증서는 등록되지만, 개인 키는 보호되어야 합니다. 개인 키를 소유한 사용자는 이 시스템이 신뢰할 수 있는 추가 모듈에 서명할 수 있기 때문입니다.

sudo -i
umask 077
mkdir -p /root/module-signing
cd /root/module-signing
openssl req -new -x509 -newkey rsa:3072 -sha256 -days 3650 -nodes \
  -subj "/CN=SLES Custom Module Signing/" \
  -keyout MOK.priv -out MOK.pem
openssl x509 -in MOK.pem -outform DER -out MOK.der
chmod 600 MOK.priv
터미널 화면에 OpenSSL 명령어가 실행되어 로컬 RSA 개인 키와 X.509 모듈 서명 인증서를 생성하는 모습이 표시됩니다.
모듈 서명용 키 쌍을 별도로 생성하고 개인 키는 관리자만 접근할 수 있도록 제한하십시오.

-nodes간단한 예시를 위해 암호화되지 않은 개인 키를 생성합니다. 실제 서명 파이프라인에서는 보안 정책에 따라 적절하게 보호되는 암호화 키 또는 외부 서명 서비스를 사용하십시오. 여기에 표시된 10년 유효 기간은 예시일 뿐이며, 조직의 인증서 유효 기간을 권장하는 것은 아닙니다.

완성된 모듈을 실행 중인 커널의 모듈 디렉터리에 복사합니다. 패키징, 스트리핑 또는 기타 파일 수정 후 설치된 파일에 직접 서명합니다. mydriver및 경로를 모듈의 실제 기본 이름과 위치로 바꿉니다.

install -D -m 0644 /path/to/mydriver.ko \
  "/lib/modules/$(uname -r)/extra/mydriver.ko"
SIGN_FILE="$(readlink -f /lib/modules/$(uname -r)/build)/scripts/sign-file"
test -x "$SIGN_FILE" || echo "Locate the sign-file binary for this kernel"
"$SIGN_FILE" sha256 /root/module-signing/MOK.priv \
  /root/module-signing/MOK.der \
  "/lib/modules/$(uname -r)/extra/mydriver.ko"
modinfo -F signer "/lib/modules/$(uname -r)/extra/mydriver.ko"
커널 모듈에 대한 서명 파일 호출 예시와 modinfo 서명자 검사 결과를 보여주는 터미널 화면입니다.
설치된 .ko 파일에 서명을 적용하고 로드하기 전에 서명자 필드를 확인하십시오.

해당 경로에 도구가 없는 경우 sign-file, 관련 없는 버전을 복사하는 대신 일치하는 커널 빌드 파일과 함께 제공되는 도구를 찾으십시오. 서명자가 표시된다는 것은 파일에 서명 메타데이터가 포함되어 있음을 의미하며, 서명자가 등록되었음을 증명하는 것은 아닙니다. 서명 후에는 모듈을 절대 제거하거나 수정하지 마십시오.

4. MOK를 사용하여 공개 인증서를 등록합니다.

DER 형식의 공개 인증서를 가져오고, MOK.priv에서 요청하는 일회용 등록 암호를 설정하십시오 mokutil. 재부팅하기 전에 콘솔 액세스를 준비하십시오. 인증은 SSH 셸이 아닌 부팅 시 MokManager 인터페이스에서 수행됩니다.

mokutil --import /root/module-signing/MOK.der
mokutil --list-new
reboot
MokManager 스타일의 파란색 부팅 메뉴에서 'MOK 등록' 옵션이 다른 기기 소유자 키 옵션보다 위에 강조 표시됩니다.
UEFI 부팅 메뉴에서 "MOK 등록"을 선택하고 요청된 인증서 등록을 확인합니다.

다음 부팅 시 'MOK 등록'을 선택하고 확인 메시지에 따라 진행한 후 일회용 암호를 입력하고 부팅을 계속하십시오. 메뉴 표시는 펌웨어 및 shim 버전에 따라 다릅니다. 등록을 확인하지 않고 Linux로 돌아가면 새 인증서가 신뢰할 수 없는 상태가 됩니다.

부팅 후 특정 인증서가 등록되었는지 확인하십시오.

sudo mokutil --test-key /root/module-signing/MOK.der
sudo mokutil --list-enrolled

5. 서명된 모듈을 로드하고 남아 있는 오류를 분리합니다.

모듈 종속성 메타데이터를 업데이트하고 전체 파일 경로가 아닌 모듈 이름으로 모듈을 로드합니다. modprobe종속성을 해결하고 표준 모듈 구성을 준수합니다.

sudo depmod -a
sudo modprobe mydriver
lsmod | grep -w mydriver
modinfo -F signer mydriver
서명된 모듈을 확인하는 데 사용되는 modprobe, lsmod 및 kernel-log 명령어를 표시하는 터미널 화면입니다.
서명된 모듈이 로드된 모듈 목록에 나타나는지 확인하고 커널 로그에서 오류를 검사하십시오.

로딩이 계속 실패하는 경우, 증거에 맞는 시정 조치를 선택하십시오.

  • 키가 거부되었거나 필요한 키를 사용할 수 없습니다. 다시 실행하십시오 mokutil --test-key. 설치한 파일이 서명된 파일인지 확인하고 드라이버 업데이트로 인해 파일이 교체되었는지 확인하십시오.
  • 모듈 형식이 잘못되었습니다.modinfo -F vermagic 와 비교하고 uname -r, 활성 커널에 대해 다시 빌드하고, CPU 아키텍처를 확인하십시오.
  • 알 수 없는 기호 또는 누락된 종속성:journalctl -k -b 공급업체에서 요구하는 모듈과 커널 ABI를 확인하십시오 . 다른 서명을 사용해도 누락된 기호는 수정되지 않습니다.

부팅에 중요한 스토리지 또는 네트워크 드라이버의 경우, 먼저 비운영 시스템에서 테스트하고 복구 콘솔을 사용할 수 있는지 확인하십시오. 드라이버가 안정적으로 작동하는 것을 확인한 후에만 자동 로딩을 구성하십시오. /etc/modules-load.d/장치 감지 시 자동으로 로드되지 않는 모듈에 대한 SUSE 문서를 참조하십시오.

재부팅 후 결과를 확인하십시오.

지속적인 로딩이 중요한 경우 유지 관리 기간 동안 다시 한 번 재부팅하십시오. 보안 부팅이 활성화되어 있는지, 공개 키가 등록되어 있는지, 모듈이 있는지, 커널에서 새로운 검증 또는 호환성 오류가 보고되지 않는지 확인하십시오. .ko커널 또는 벤더 드라이버를 업그레이드한 후에는 빌드 또는 재설치하고 업데이트된 버전에 서명하십시오.

mokutil --sb-state
sudo mokutil --test-key /root/module-signing/MOK.der
modinfo -F signer mydriver
lsmod | grep -w mydriver
sudo journalctl -k -b --no-pager | tail -n 30

주요 문서: SUSE SLES 15 SP6: UEFI 및 머신 소유자 키 ; SUSE: 커널 모듈 관리 ; Linux 커널: 모듈 서명 기능 ; Linux 커널: 외부 모듈 빌드 . SLES 15 SP6 관리 가이드는 2026년 9월 17일에 업데이트되었습니다. 타사 드라이버 설치 프로그램 및 기본값이 아닌 커널 버전의 명령 동작은 해당 관리자에게 확인해야 합니다.

댓글 남기기

Debian 12에서 WireGuard Point-to-Site VPN을 구성하는 방법

Debian 12에서 WireGuard Point-to-Site VPN을 구성하는 방법

원격 클라이언트 한 명을 위해 Debian 12 기반 WireGuard VPN 서버를 설정합니다. 키, IPv4 포워딩, nftables NAT, 방화벽 액세스 및 연결 확인을 구성합니다.

Restic과 Cron을 사용하여 Nextcloud 백업을 일관되게 자동화하세요

Restic과 Cron을 사용하여 Nextcloud 백업을 일관되게 자동화하세요

Nextcloud 파일과 MariaDB를 함께 백업하고, cron을 사용하여 암호화된 Restic 스냅샷을 예약하고, 운영 서버에 위험을 초래하지 않고 복구를 검증하세요.

데비안에서 부팅 시 원격 SSHFS 디렉터리를 자동으로 마운트하는 방법

데비안에서 부팅 시 원격 SSHFS 디렉터리를 자동으로 마운트하는 방법

데비안에서 SSH 키, fstab, systemd 자동 마운트를 사용하여 SSHFS 부팅 마운트를 구성하는 방법입니다. 재부팅 확인, 권한 설정, 타임아웃 및 문제 해결 기능도 포함되어 있습니다.

TGZ 내보내기를 사용하여 Zimbra CE 사서함을 백업 및 복원하는 방법

TGZ 내보내기를 사용하여 Zimbra CE 사서함을 백업 및 복원하는 방법

Zimbra Community Edition 개별 사서함을 내보내고, TGZ 백업의 유효성을 검사하고, 기존 메일을 덮어쓰지 않고 누락된 항목을 복원할 수 있습니다.

승인된 사용자가 Keycloak 로그인을 통해 Jitsi 룸을 생성할 수 있도록 허용

승인된 사용자가 Keycloak 로그인을 통해 Jitsi 룸을 생성할 수 있도록 허용

Keycloak 및 토큰 인증을 사용하여 승인된 계정만 Jitsi Meet 회의실을 시작할 수 있도록 허용하고, 필요한 경우 게스트 참여도 허용합니다.

LDAP를 통해 Active Directory 사용자를 ONLYOFFICE DocSpace와 동기화하세요.

LDAP를 통해 Active Directory 사용자를 ONLYOFFICE DocSpace와 동기화하세요.

ONLYOFFICE DocSpace를 Active Directory 또는 OpenLDAP에 연결하고, 사용자 및 그룹을 안전하게 가져오고, 계정 필드를 매핑하고, 안정적인 동기화를 예약하세요.

ONLYOFFICE 문서 서버에 글꼴 추가하기: Docker vs Linux

ONLYOFFICE 문서 서버에 글꼴 추가하기: Docker vs Linux

ONLYOFFICE Document Server에 사용자 지정 글꼴을 설치하고, Docker 마운트된 글꼴과 직접 복사된 글꼴을 비교하고, 글꼴 목록을 다시 빌드하고, 결과를 확인합니다.

편집 기능을 유지하면서 ONLYOFFICE 문서를 HAProxy 뒤에 배치하는 방법

편집 기능을 유지하면서 ONLYOFFICE 문서를 HAProxy 뒤에 배치하는 방법

ONLYOFFICE Docs에 대해 HAProxy HTTPS, 전달 헤더, WebSocket 시간 초과 및 상태 확인을 구성한 다음 편집 및 저장이 제대로 되는지 확인합니다.

SLES 15 보안 부팅에 사용자 지정 커널 모듈 설치 및 서명

SLES 15 보안 부팅에 사용자 지정 커널 모듈 설치 및 서명

보안 부팅을 비활성화하지 않고 사용자 지정 SLES 15 커널 모듈을 로드합니다. 실행 중인 커널과 일치시키고, .ko 파일에 서명하고, MOK 키를 등록하고, 로드 여부를 확인합니다.

rsyslog 및 상호 TLS를 사용한 안전한 SLES Syslog 포워딩

rsyslog 및 상호 TLS를 사용한 안전한 SLES Syslog 포워딩

SLES 시스템 로그를 인증된 TLS를 통해 원격 rsyslog 수집기로 전송하고, 인증서 확인, 장애 버퍼링 및 전송 테스트를 수행합니다.