Linux 배포를 위한 자동 모듈 서명

Linux 배포를 위한 자동 모듈 서명

저는 Linux 모듈(드라이버) 및 디지털 서명을 작성하는 것이 처음이므로 이해가 잘못된 경우 정정해 주시기 바랍니다.

make modules_install모듈에서 실행 하면 다음 오류가 발생합니다(veikk는 모듈 이름입니다):

At main.c:160:
- SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:72
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:79
sign-file: certs/signing_key.pem: No such file or directory

서명 모듈에 대한 튜토리얼을 찾고 있는데 서명된 모듈을 배포하는 방법이 매우 혼란스럽습니다. 수동으로 모듈에 서명하는 방법에 대한 튜토리얼이 있습니다(예:이것,이것,이것), 그러나 이는 설치 후인 것으로 보이며 키를 생성하고 커널에 등록하는 작업이 포함됩니다. 커널이 설치 시 모듈에 자동으로 서명하려고 하는 것 같습니다 certs/signing_key.pem(따라서 오류가 발생함).

제공된 제안을 사용하세요이 Unix Stack Exchange 질문, 나는 이 오류를 없앨 수 있었습니다. 그러면 파일이 생성된 x509.genkey다음 커널 디렉토리 내부의 디렉토리에 및 파일이 생성됩니다 signing_key.pem.signing_key.x509certs

printf "[ req ]\ndefault_bits = 4096\ndistinguished_name = req_distinguished_name\nprompt = no\nstring_mask = utf8only\nx509_extensions = myexts\n\n[ req_distinguished_name ]\nCN = Modules\n\n[ myexts ]\nbasicConstraints=critical,CA:FALSE\nkeyUsage=digitalSignature\nsubjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid" > x509.genkey
openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out $(BUILD_DIR)/certs/signing_key.x509 -keyout $(BUILD_DIR)/certs/signing_key.pem

이 명령을 실행하면 make modules_install모듈이 올바르게 설치된 것으로 나타납니다. 출력에 modinfo veikk유효한 서명이 표시된 것으로 보입니다.

filename:       /lib/modules/5.1.5-arch1-2-ARCH/extra/veikk.ko.xz
license:        GPL
srcversion:     A82263B16A25C763382D8B9
alias:          hid:b0003g*v00002FEBp00000003
alias:          hid:b0003g*v00002FEBp00000002
alias:          hid:b0003g*v00002FEBp00000001
depends:        hid
retpoline:      Y
name:           veikk
vermagic:       5.1.5-arch1-2-ARCH SMP preempt mod_unload
sig_id:         PKCS#7
signer:         Modules
sig_key:        27:E8:FC:4A:4E:15:0C:AF:40:D5:A1:A4:10:E5:B5:55:BF:AF:EB:66
sig_hashalgo:   sha512
signature:      AC:AF:49:16:D4:AD:D9:7B:C5:52:A5:9F:F8:46:1C:DF:93:71:05:00:
4D:BF:96:96:3C:D1:11:19:6F:AC:D5:27:7D:E3:EE:8D:6C:BB:17:F4:
53:D3:FD:EE:85:22:97:57:BB:27:23:9C:8A:04:79:75:99:C4:A0:E6:
29:AF:20:15:87:EA:41:D2:26:00:2B:A1:39:68:28:FE:05:F5:F1:B1:
42:F8:FF:66:C0:6C:B5:17:A1:E7:F4:65:0A:17:64:99:9E:11:86:C0:
94:E7:D5:83:59:50:BE:0D:33:B8:A2:64:66:4F:70:A3:EB:E4:FB:B4:
52:D9:26:9C:57:CC:0D:D6:53:51:C2:90:D6:51:13:83:B6:22:EC:C9:
DF:15:1D:1E:34:BD:7A:2D:8F:13:2D:78:8C:D3:EA:43:0B:6C:8D:DA:
9A:DA:A1:74:03:FC:D8:72:D0:96:54:52:60:AB:7A:BB:3C:D0:F4:8C:
B7:92:21:B1:D8:02:01:6B:9B:AD:11:1A:90:5B:21:94:12:B7:5A:15:
10:6B:92:FA:74:F5:49:A2:4A:65:FF:4E:B6:9B:08:7B:BD:E5:85:9D:
98:52:A2:E4:D7:B4:0D:90:0D:62:7E:CE:6B:F8:8B:0C:33:76:1E:01:
C7:0D:29:8C:97:BC:E1:35:58:2B:55:3F:6E:D9:36:46:50:76:74:67:
1F:B2:F6:C3:6B:24:4D:C1:7E:8D:14:4D:10:2D:1D:80:3C:82:02:1C:
A6:87:14:8B:A0:3C:21:EA:DD:A7:CD:9C:D0:1B:DF:84:53:BF:0A:B6:
DA:50:C4:AA:FF:90:44:47:4B:9F:8A:1C:C3:14:5D:A3:B5:A4:5F:6F:
E1:E0:E2:51:B1:1E:5C:7E:95:70:72:76:3A:9D:53:10:F5:F0:3F:CD:
E5:2B:EF:E4:3D:DB:64:65:9B:AE:E6:23:6E:4E:F1:4B:94:17:FF:FF:
06:A0:79:84:E1:BE:24:9D:93:B9:D4:94:41:76:92:D5:5B:8F:F6:4F:
98:B9:24:6F:01:CD:4F:49:52:15:48:79:4A:F3:46:CF:8A:AC:21:A9:
64:81:AC:01:15:80:06:F4:C3:9D:8A:C0:48:A6:53:C5:81:C2:DD:B1:
C6:B9:80:B8:A9:C2:89:B8:20:C5:89:81:90:15:86:78:F7:09:3F:FD:
F6:AC:54:57:8C:E0:B4:62:E0:78:CB:59:63:FA:E6:E2:8C:78:59:31:
92:E5:B5:E3:75:FE:F6:8F:82:3B:D6:5B:B1:84:E9:A8:9E:A4:B0:03:
99:8D:41:55:FF:11:A8:B6:A3:B9:EA:1D:5C:58:F7:D2:A6:F4:3A:C9:
B1:E6:83:10:B7:E5:E4:15:28:2C:62:96

내 질문:이것이 운전자 서명에 권장되는 (그리고 안전한) 방법입니까?바람직하게는 최종 사용자가 설치할 때 드라이버 자체 서명에 대해 걱정할 필요가 없기를 바랍니다.

이해가 다소 혼란스럽기 때문에 이해가 안 되는 몇 가지 질문은 다음과 같습니다.

  • 이 빌드의 자동 서명은 설치 후 드라이버를 수동으로 서명하는 위의 자습서만큼 안전합니까? 즉, 서명하기 위해 키를 생성하고 있지만 해당 키는 (적어도 명시적으로) 커널에 로드되지 않습니다.
  • 드라이버는 일반적으로 어떻게 배포되고 서명됩니까? 저는 Nvidia처럼 Linux용 독점 드라이버를 보유한 대기업이 어떻게든 모듈에 서명했으면 좋겠습니다.
  • 모듈에 사전 서명할 수 있는 방법이 있습니까? 이 모듈은 사용하려는 모든 시스템에 맞게 구축되어야 하기 때문에 이는 가능성이 없어 보입니다.

보안 부팅을 켜진 상태로 유지하고 싶습니다(비활성화하면 서명되지 않은 모듈을 로드할 수 있지만 고객은 보안 부팅을 켜는 것을 선호합니다).

답변1

나는 이미 했어아치 기호 모듈두 가지를 모두 사용하여 커널 실행 프로세스를 단순화합니다.나무에&나무를 떠나서명된 커널 모듈. 현재는 다음과 같은 빌드를 지원합니다.

  • linux-lts
  • 리눅스 강화
  • 리눅스-젠

zfs//트리 외부 nvidia커널 lkrg모듈 지원

이제 서명 커널을 사용자 정의할 수 있습니다.3가지 명령어로 설치.

관련 정보