centos内核编译与其签名机制

简介:

centos内核编译与其签名机制



linux内核3.7引入的签名机制,极大地方便了对内核模块的安全认证,同时也为操作系统厂家提供了IP保护的技术手段。不过,凡事有利也有弊。对刚刚接触具有签名机制的内核的工程师而言,需要一段理解并适应新内核的过程。为此,小编结合自己的工作经历,总结了一些要点和大家一起分享 。


1.什么是内核签名机制?


内核签名就是内核利用公钥对驱动模块校验的过程,对检验通过的模块,准许加载,而对没有签名的内核驱动模块或者签名没有通过检验的模块,根据不同的内核选项,禁止或者允许加载。


2.如何使用内核签名?


内核签名可以使用的场合包括但不限定于:

1.和某个内核或者操作系统厂商紧密捆绑的驱动模块,包括仅仅限定于特定版本内核的内核驱动模块;

2.受限或者受控的驱动模块,包括在操作系统或者内核无法改变的情况下,只能在知道公钥和私钥的情况下生成可被加载的驱动模块。


3.签名校验可能带来哪些不便?


在使用了签名校验的操作系统上进行内核的重新编译和模块的二次开发时,如果不知道先前的私钥和公钥生成算法的话,就无法直接加载新编译出的内核二进制或者驱动模块。


4.如何规避可能的影响?


禁止内核签名检验,并重新生成对应的initramfs,修改boot memu,重新引导系统从自己新加的boot entry启动。


5.实战举例


下面以centos 7 (based on linux kernel 3.10)为例,介绍具体的操作步骤:


1.从官网下载和当前文件系统版本一致的Centos .DVD或者其他文件系统映像;


2. 把映像烧写到启动盘或者用UltraISO等启动盘制作软件打开,从其rpm仓库中中找到对应的内核二进制、confg配置文件(x86_64_config)、initramfs;


3.根据上面找到的内核二进制版本,去官网上下载对应的内核源代码rpm或者压缩文件,解压后,把上面找到的配置文件拷贝过来作为 .config。当然,默认的.config文件也可以来自待更新的系统的/boot/下自带的config文件;


4. make menuconfig查看默认的配置,重点检查sign相关的选项,如果:

  • 内核配置文件没有使用签名机制,所有的sign checking option都关掉:

说明没有使用签名检验,可以直接修改内核驱动或者内核以及配置文件,make 后生成新的内核活驱动,或者make modules_install或者make install,生成的内核或者驱动可以替换之前的模块直接使用。

  • 内核已经使用内核签名校验,那么需要参考下面的步骤来制作可以启动的内核或驱动:

  1. 运行make menuconfig,务必去掉force module sign checking选项,否则生成的内核只会加载和当前公钥相匹配的驱动,而我们很难保证内核二进制的公钥、initramfs模块里的公钥和文件系统里面/lib/modules下面驱动模块里的公钥完全一致。

  2. 运行make

  3. 指定kernel install 路径 INSTALL_MOD_PATH

  4. make modules_install

  5. 利用dracut -k  kernel.img $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) 来生成和内核匹配的initramfs

  6. 把对应arch下面的bzImage和initramfs拷贝到/boot/

  7. 往/etc/grub.cfg里添加引导bzImage和initramfs的启动项,然后运行grub2-mkconfig

  8. 重启,然后在grub里选择自己刚添加的kernel entry,进入操作系统,使用并验证新的内核和驱动。





















本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1763619  ,如需转载请自行联系原作者

相关文章
|
5月前
|
Linux Perl
Linux centos7升级内核(两种方法:内核编译和yum更新)
Linux centos7升级内核(两种方法:内核编译和yum更新)
492 0
Linux centos7升级内核(两种方法:内核编译和yum更新)
|
8月前
|
安全 Linux
Centos 7.x 升级内核
千万不要小瞧这操作。
190 0
Centos 内核更新后缺少initramfs 导致无法启动
Centos 内核更新后缺少initramfs 导致无法启动
|
2月前
|
Kubernetes 监控 Linux
容器服务ACK常见问题之新增一台CentOS 5.4内核的节点失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
9月前
|
安全 Linux 虚拟化
【Centos7系统内核如何更换?为什么需要更新内核?】
在CentOS 7系统中,内核是非常重要的一部分。它是操作系统的核心,负责管理系统的硬件资源和提供各种系统服务。
143 0
|
5月前
|
Prometheus 监控 Cloud Native
Linux|centos7 Prometheus的自动服务发现 一(文件发现机制)
Linux|centos7 Prometheus的自动服务发现 一(文件发现机制)
58 0
|
7月前
|
Linux 编译器 C语言
百度搜索:蓝易云【Linux系统:CentOS编译Linux内核教程!】
请注意,以上步骤仅提供了一个基本的编译内核的概述。实际的编译过程可能因系统配置、内核版本等因素而有所差异。建议参考Linux内核官方文档和其他可靠资源,以获取更详细和特定于你的系统的指导。在进行任何内核操作之前,请务必备份你的系统数据并了解相关风险。
172 2
百度搜索:蓝易云【Linux系统:CentOS编译Linux内核教程!】
|
8月前
|
Linux C语言
实验:CentOS 7 编译安装最新版内核 Linux Kernel 6.5.2
CentOS 7 编译安装最新版内核 Linux Kernel 6.5.2
469 0
|
11月前
|
Linux
Centos更新升级内核命令-以及区别.
建议在部署环境前使用命令升级,不建议在部署完业务后升级,可能会出现一些意想不到的问题!
488 0
|
NoSQL Linux 编译器
Linux CentOS 内核编译全流程:从安装vmware开始
Linux CentOS 内核编译全流程:从安装vmware开始
448 1
Linux CentOS 内核编译全流程:从安装vmware开始