1

我在 LWN 上看到了很多关于允许动态加载 Linux 安全模块 (LSM) 的文章,但无法找到有关如何实现它的具体信息。LSM 钩子(我不知道这是不是正确的术语)不再在内核中导出,但它们的地址可以被检索kallsyms_lookup_name然后分配给函数声明。

有人提到LSM 挂钩不可卸载,但这是真的吗?它甚至意味着什么?如果 Linux 可加载内核模块注册了一些钩子,以后是否无法取消注册它们?为什么会出现这种情况?是否有解决方法或强制他们卸载的方法?

动态可加载 LSM 的编写方式是否必须与内置 LSM 不同?还是两者都使用相同的约定和接口?

4

1 回答 1

0

从技术上讲,可以对内核进行热补丁以向任何内容添加挂钩。https://stackoverflow.com/a/6742086/2079814

另一种可能性是利用 kpatch 注入 LSM。

这些选项都不会被认为是最佳实践,但应该在理论上有效。我以前没有见过后一种方法(kpatch)。

于 2022-03-03T20:15:22.487 回答