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 ,如需转载请自行联系原作者

centos内核编译与其签名机制相关推荐

  1. 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...

    操作系统的课程设计,本人也是一头雾水地做完了课程设计,在这里贴下操作过程,放下当时参考的一篇CSDN文章链接:https://blog.csdn.net/cxy_chen/article/detail ...

  2. CentOS内核编译

    From: http://blog.csdn.net/lchengcome/article/details/6715591 From: http://bbs.chinaunix.net/thread- ...

  3. 桌面PC/服务器 ubuntu18.04 Linux内核编译升级与机制分析

    1.下载内核并且解压 安装依赖 sudo apt-get install gcc libncurses5-dev build-essential kernel-package libssl-dev f ...

  4. CentOS下编译Linux内核

    前言 编译内核是一项很简单的事情,但却是进入Linux内核世界的第一步,想要开发内核代码,想要了解内核的运行机制,第一步就是编译Linux内核,以下是在centos7.5环境下编译内核的具体流程. 1 ...

  5. arm-linux内核编译过程小结

    转自:https://blog.csdn.net/lidan113lidan/article/details/44981829?spm=1001.2014.3001.5501 记在前面的杂七杂八 内核 ...

  6. Linux内核编译与管理

    我们说的Linux其实指的就是内核而已.这个核心控制你主机的所有硬件并提供系统所有的功能,我们开机的时候其实就是利用开机管理程序加载这个核心文件来侦测硬件,在核心加载适当的驱动程序后,你的系统才能够顺 ...

  7. linux内核编译及添加系统调用(hdu)_浅谈关于Linux内核write系统调用操作的原子性

    Linux系统的write调用到底是不是原子的.网上能搜出一大堆文章,基本上要么是翻译一些文献,要么就是胡扯,本文中我来结合实例来试着做一个稍微好一点的回答. 先摆出结论吧.结论包含两点,即write ...

  8. linux 内核编译详解

    一.准备工作 准备工作如何做,这里就不详说了. a) 首先,你要有一台PC,装好了Linux. b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的).make.ncurse ...

  9. 【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )

    文章目录 一.操作系统需要满足的要素 二.宏内核 三.微内核 四.Linux 内核动态加载机制 一.操作系统需要满足的要素 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要 为 ...

最新文章

  1. 苏宁11.11:苏宁易购订单搜索系统架构及实现
  2. 这可能是第二好的自定义 View 教程之属性动画
  3. 【Web安全】php://filter 的浅略底层分析
  4. 采用加密技术进行数据保护的5大优势
  5. abap 一些小知识点的总结
  6. 最实用前端开发框架对比评测
  7. vb使用字符串分隔字符串_为什么要使用字符串
  8. 层次分析法matlab_建模开讲课程回放2:层次分析法及其MATLAB
  9. 跟我学《JavaScript高程3》第一讲,视频课程,课程笔记
  10. scrapy爬取多页面
  11. ActionBar(3):搜索条
  12. python协程实现一万并发_python中的协程并发
  13. SAP 客户端不能访问解决方案
  14. IAP固件升级原理及实现详解
  15. 中台能力是什么?PaaS是什么?微服务是什么?
  16. 软件测试工程师如何保证软件的质量?
  17. 2022半入耳式蓝牙耳机怎么选?半入耳式耳机排行榜
  18. python3.6的新特性:f-strings格式化输出;python3.8新特性:f-strings增加了 = 说明符
  19. Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始
  20. 身份实名认证增强版API开发文档

热门文章

  1. 在tsx中引入less会提示模块找不到,但是可以运行
  2. gulp,grunt,bower,feoman,fis 简单说明
  3. 使用Jmeter 创建Post请求
  4. 检查本机显卡的cuda信息及适配cuda-sdk版本
  5. BZOJ 2436 NOI嘉年华(单调优化)
  6. C# WinFrom 去掉groupbox的边框
  7. MySQL kill操作
  8. 每日一linux命令
  9. Know more about commit
  10. 笔记本键盘维修[原创]