【问题标题】:lttng: Unable to list kernel events: Kernel tracer not availablelttng:无法列出内核事件:内核跟踪器不可用
【发布时间】:2017-08-22 03:36:34
【问题描述】:

当前运行 CENTOS 7 的机器试图安装 lttng-toolslttng-modules

我正在完成在位于http://lttng.org/docs/v2.9/ 的机器上设置 lttng 所需的步骤,并且在此过程中几乎每一步都遇到问题。我现在的问题是安装lttng-modules。我尝试运行提供的一组命令来安装lttng-modules

cd $(mktemp -d) &&
wget http://lttng.org/files/lttng-modules/lttng-modules-latest2.9.tar.bz2 &&
tar -xf lttng-modules-latest-2.9.tar.bz2 &&
cd lttng-modules-2.9.* &&
make &&
sudo make modules_install &&
sudo depmod -a

我收到错误“Can't read private key”,然后是 INSTALL /probe/path/name/probe_name.ko 以获取整个探测器列表。我通读了自述文件并确保正确设置了操作系统配置变量依赖项。从这里开始,我完全不确定,任何帮助将不胜感激。

终端输出的一个sn-p如下:

Can't read private key  
  INSTALL /tmp/tmp.frbWYvVaL8/lttng-modules-2.9.1/probes/lttng-probe-x86-exceptions.ko  
Can't read private key 
  INSTALL /tmp/tmp.frbWYvVaL8/lttng-modules-2.9.1/probes/lttng-probe-x86-irq-vectors.ko  
Can't read private key  
  INSTALL /tmp/tmp.frbWYvVaL8/lttng-modules-2.9.1/tests/lttng-clock-plugin-test.ko  
Can't read private key   
  INSTALL /tmp/tmp.frbWYvVaL8/lttng-modules-2.9.1/tests/lttng-test.ko  
Can't read private key  
  DEPMOD  3.10.0-327.el7.x86_64  
make[1]: Leaving directory `/usr/src/kernels/3.10.0-327.el7.x86_64' 

【问题讨论】:

  • dadrexel,你使用 Secureboot 吗?当您构建外部模块并且您的内核已签名时,您必须使用您的 MOK 密钥对模块进行签名,但如果您的内核来自 CentOS 而您没有主 CentOS 密钥,则不能签署刚刚构建的模块(这是什么信息)。您有两种变体:1) 禁用安全启动和模块签名 (CONFIG_MODULE_SIG_FORCE - askubuntu.com/questions/755238) 或 2) 使用您自己的私钥对模块(和内核)签名并使用 mokutil 将此密钥安装到 UEFI:lxr.free-electrons.com/source/Documentation/…

标签: linux-kernel code-signing lttng


【解决方案1】:

这听起来像是启用了 Linux 模块签名(记录在 http://lxr.free-electrons.com/source/Documentation/module-signing.txt?v=4.8),通常在启用了 UEFI Secureboot 的现代系统上打开。您的引导加载程序(shim-signed 或其他)使用一些 UEFI 预安装(受信任)的 OEM/KEK 密钥进行签名,垫片预装了一些操作系统供应商密钥,供应商的内核和模块使用操作系统供应商密钥进行签名(更多信息请参见 https://wiki.ubuntu.com/SecurityTeam/SecureBoot )。您的内核可能启用了 CONFIG_MODULE_SIG_FORCE(就像在 ubuntu https://askubuntu.com/questions/755238 中所做的那样),并且不会加载未签名的模块(或使用不受信任的密钥签名的模块)。

如果您不是操作系统发行版的作者,则您没有操作系统供应商私钥来签署模块。并且消息说你没有任何密钥来签署模块。

你有几个变种:​​

  • 尝试在您的操作系统中找到所需的模块(预构建并由您的操作系统供应商签名)。如果没有所需的模块,请尝试要求操作系统供应商将其包含在内(或向他们支付费用以使用他们的密钥签署您的模块)。 (RedHat 在 EfficiOS 的帮助下于 2015 年为 RHEL7 做了一些 lttng:https://developers.redhat.com/blog/2015/07/09/lttng-packages-available-for-rhel-7/“LTTng 软件包现在可用于 Red Hat Enterprise Linux 7” - 可能仍发布在 packages.efficios.com 门户上,并且可能与 CentOS 兼容)
  • 制作您自己的密钥层次结构。您不能将任何密钥添加到供应商签名的内核二进制文件中,但内核将允许您使用您的 MOK 密钥对模块进行签名。所以你需要创建你的密钥,用mokutil将它安装到shim,(它将作为受信任的if recorded in hardware store添加到内核-UEFI密钥数据库),用它签署新模块(原始内核和操作系统模块将与操作系统一起使用供应商密钥)。
  • 不安全:禁用安全启动并使用(自定义编译?)内核,需要模块签名并使用您自己的密钥注册为受信任(should be listed in cat /proc/keyskeyctl list %:.system_keyring),并签署内核的所有模块
  • UNSAFE,不推荐,仅可用作测试 PC 的临时解决方案:禁用安全启动并使用(自定义编译或来自操作系统供应商,如果它有这样的版本)内核禁用模块签名(禁用 CONFIG_MODULE_SIG_FORCE)。

操作系统供应商提供了一些关于模块签名的手册:

【讨论】:

  • 在 Fedora 上注册密钥 (mokutil --import) 和签名模块的示例(CentOS、RHEL 和 Fedora 相关且相似):pellegrino.link/2015/11/29/…
  • 还要检查stackoverflow.com/a/27519206 - 当重新编译完整内核时,可以生成密钥;如果您的情况是这样,只需使用密钥重建内核并使用您的 MOK 签名/安装这个新密钥。
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2018-06-20
  • 2020-12-31
  • 1970-01-01
  • 2012-04-01
  • 2021-04-18
相关资源
最近更新 更多