关于操作系统:SysCare为您的操作系统保驾护航

58次阅读

共计 2294 个字符,预计需要花费 6 分钟才能阅读完成。

最近,openEuler 社区推出了一个翻新我的项目:Linux 操作系统对立热补丁服务 SysCare。本文将带您摸索 SysCare 的神秘。

意识 SysCare

「SysCare: I take care of your systems.」

顾名思义,SysCare 是一款操作系统运维工具,解决零碎运行过程中的各类故障和危险,为 Linux 操作系统提供全方位爱护。

SysCare 提供一套简洁的命令,实现了内核热补丁 (kpatch) 和用户态热补丁 (upatch) 的制作及补丁治理能力。用户不须要关怀技术细节和零碎组件差别,也无需进行业务迁徙,通过简略的命令就能在线修复系统漏洞。

如下 SysCare 零碎示意图可知,反对如下三层热补丁:

  • 底层内核热补丁 (Kernel):蕴含所有组件和驱动的热补丁
  • 中间层零碎库热补丁(Libs):蕴含 glibc、OpenSSL、Protobuf 等
  • 下层利用热补丁(Apps):反对 QEMU、Redis、MySQL 等利用

为什么开发 SysCare

在 Linux 世界,有一个困扰大家已久的难题:如何在不影响业务的状况下,疾速牢靠地修复破绽、解决故障。

以后常见的办法是采纳 「热补丁」:在业务运行过程中,对问题组件间接进行代码级修复,业务无感知。然而,以后热补丁制作形式简单,补丁须要代码级匹配,且治理艰难,特地是用户态组件形式多样,还没有简便对立的补丁机制。

为了解决热补丁制作和治理的问题,SysCare 应运而生。

SysCare 补丁制作

内核热补丁曾经有绝对成熟的 kpatch、livepatch 等计划,并且曾经有绝对宽泛的利用,此处对技术计划不再赘述。下文将重点介绍 SysCare 用户态热补丁的实现办法。

用户态热补丁的难题

正如大家所知,用户态热补丁面临许多艰难:

  • 「编程语言多种多样」:现有从汇编代码生成补丁的形式难以反对多种语言,代码改变的影响范畴,不同语言也不尽相同。
  • 「单个程序文件会有多个运行实例」:打补丁操作须要找到具体过程再执行,但程序可能曾经在运行,也可能尚未运行,通过监控程序文件是否被执行的形式,代价较大,操作艰难。
  • 「动静库」:在过程运行过程中加载,无奈提前确定被加载过程、地位和机会,现有技术无奈对动静库制作热补丁。
  • 「编译形式、程序状态等多种多样」:每个程序的编译和链接过程都不雷同,须要跟踪每个过程各自的编译过程,能力制作出相应的热补丁,补丁制作难度急剧回升。

SysCare 新计划

针对用户态热补丁问题,SysCare 提出了新的用户态热补丁解决方案,解决用户态热补丁的难题。

「比照二进制编译指标文件,生成热补丁」

通过比照批改前后的代码生成的.o 指标文件的不同,找到差别点,将差别点取出,生成热补丁。如下图所示:别离编译批改前后的代码,比拟生成的 .o 文件 (source file 和 after patched),找到变动的局部:新增 (data_e, func_6),批改 (func_4, func_3),删除 (data_b, data_d, func_2) 的局部,将这些差一点提取到一个 .o 文件中 (real patch)。

「劫持编译器,跟踪编译过程」

通过 uprobe 技术,向 GCC 等编译器注入代码,跟踪程序的整个编译过程,在编译过程中获取制作热补丁所需的信息和 .o 指标文件。

「针对 ELF 文件(程序可执行文件)的热补丁」

应用 uprobe 技术,将热补丁与 ELF 文件绑定。在 ELF 文件运行时,通过 uprobe 触发补丁失效,这样就不须要监控过程,无论过程是否曾经运行,都能够在打补丁后或新过程运行时使补丁失效;同时该技术也能够给动静库打热补丁,解决了动静库热补丁的难题。如下图所示,补丁失效流程为:

  1. 执行 uprobe 零碎调用,在待批改函数 func 处减少 uprobe 断点
  2. 注册 uprobe handler
  3. 进行运行到 func 时调用 uprobe handler
  4. 将 patch 映射到以后过程地址空间
  5. 进行安全检查,如果能够打补丁,将 func 的第一条指令批改为 jump 指令,指向 patch 地址
  6. 跳转到 patch 地址执行

SysCare 补丁治理

因为以后的热补丁治理计划比较复杂,SysCare 通过屏蔽内核热补丁和用户态热补丁的差别,简化了补丁治理。通过 SysCare build 命令,即可制作指定组件的热补丁。

另外,SysCare 也提供了 apply、active、deactive、remove、status、info、list 等补丁治理命令,用于利用、激活、去激活、移除、查问状态、查问信息、查问补丁列表等。

具体应用办法可参见官网文档:https://docs.openeuler.org/zh/docs/22.03_LTS_SP1/docs/SysCare/ 应用 SysCare.html

我的项目布局

SysCare 已在 openEuler 22.03 LTS SP1 版本首次公布,并将在 openEuler 22.03 LTS SP2 版本提供了残缺的对立热补丁性能,反对 x86 和 ARM 架构,反对用户态和内核态热补丁。

SysCare 的后续布局如下:

  • openEuler 22.03 LTS SP2 版本:集成到 Apollo 服务平台,反对在 openEuler 代码仓基于 PR 间接生成和公布热补丁,反对从 openEuler 官网源获取和利用热补丁。
  • openEuler 23.09 版本:反对 Linux 6.x 内核,反对 C++,欠缺简单编译过程的利用反对,可靠性和性能晋升。
  • openEuler 24.03 LTS 版本:提供集群补丁治理能力,提供如疾速重启等零碎热修复能力。

退出咱们

更多内容,也欢送查看我的项目地址:https://gitee.com/openeuler/syscare

正文完
 0