在 CentOS 8.2 上编译 Linux 内核 5.x,证书

在 CentOS 8.2 上编译 Linux 内核 5.x,证书

我正在使用CentOS 8.2withKernel (4.18.0-193.6.3.el8_2.x86_64)并且我有兴趣编译Kernel version 5.7.

实际上,我需要提取一些库,因为我不想安装在我的机器上。

我正在按照这个步骤https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html

sudo dnf upgrade -y
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.7.tar.xz
unxz -v linux-5.7.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.7.tar.sign
gpg --verify linux-5.7.tar.sign 
gpg --recv-keys 647F28654894E3BD457199BE38DBBDC86092693E
gpg --verify linux-5.7.tar.sign
tar xvf linux-5.7.tar
cp -v /boot/config-$(uname -r) .config
sudo dnf group install "Development Tools"
sudo dnf install ncurses-devel bison flex elfutils-libelf-devel openssl-devel
make menuconfig
make 

但是,在这里make我得到了这个:

  CC      kernel/pid_namespace.o
  CC      kernel/stop_machine.o
  CC      kernel/audit.o
  CC      kernel/auditfilter.o
  CC      kernel/auditsc.o
  CC      kernel/audit_watch.o
  CC      kernel/audit_fsnotify.o
  CC      kernel/audit_tree.o
  CC      kernel/hung_task.o
  CC      kernel/watchdog.o
  CC      kernel/watchdog_hld.o
  CC      kernel/seccomp.o
  CC      kernel/relay.o
  CC      kernel/utsname_sysctl.o
  CC      kernel/delayacct.o
  CC      kernel/taskstats.o
  CC      kernel/tsacct.o
  CC      kernel/tracepoint.o
  CC      kernel/irq_work.o
  CC      kernel/padata.o
  CC      kernel/crash_dump.o
  CC      kernel/jump_label.o
  CC      kernel/iomem.o
  CC      kernel/rseq.o
  AR      kernel/built-in.a
  CC      certs/system_keyring.o
make[1]: *** No rule to make target 'certs/rhel.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1729: certs] Error 2
[joseluisbz@centos linux-5.7]$ 

怎么解决呢?

1 2

答案1

RHEL/CentOS 内核被构建为兼容安全启动,因此它已使用 RedHat 的私钥进行签名。您不会从 RedHat 获得它,因此您的选择是为安全启动/内核签名创建自己的密钥+证书,或者在系统中禁用安全启动。

相关内核编译选项:

  • CONFIG_MODULE_SIG_KEY(在“加密 API”下):指定用于对内核模块进行签名的文件。certs/rhel.pem在 RHEL/CentOS 内核上设置为;如果设置为“出厂默认”值certs/signing_key.pem,内核编译过程将自动为您生成密钥和证书。
  • CONFIG_MODULE_SIG(在“启用可加载模块支持”下):启用内核模块签名验证
  • CONFIG_MODULE_SIG_FORCE:使内核拒绝签名无法验证或根本没有签名的模块。如果没有这个,安全启动就不会很有效。
  • CONFIG_MODULE_SIG_ALL:使内核构建过程自动签署与内核一起构建的所有模块。

你应该阅读Documentation/admin-guide/module-signing.rst有关模块签名的更多信息,请参阅内核源代码包。它包括有关配置密钥自动生成过程以及使用 OpenSSL 生成您自己的长期内核签名密钥的说明。它还告诉您如何单独签署模块,以防您想使用内核包中未包含的某些模块(“第三方模块”)。

如果您的系统支持安全启动并且您不想禁用它,那么下一步应该是将内核签名密钥的公共部分添加到安全启动db变量中,或者作为shim.efi引导加载程序的MOK密钥。但最简单的选择可能是暂时禁用安全启动,并首先学习编译和安装新内核及其模块,而不需要担心安全启动的复杂性。一旦您拥有带有签名模块的内核,无需安全启动即可工作,您就可以开始找出在特定硬件上使用带有自定义密钥的安全启动的最佳方法。

在运行之前make menuconfig,您可能应该运行make oldconfig让内核配置工具自动检查您从标准 CentOS 内核版本 4.18 复制的配置文件,并询问您在版本 4.18 和您正在编译的内核版本之间添加的任何新配置选项应该如何被设置。 (这将是一个相当长的非常技术性问题的列表,但是通过在提示中键入问号将显示其所询问的配置选项的帮助文本。)

相关内容