You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

最新Linux内核中能否编写可动态加载卸载的Linux Security Module?

Linux 6.0+ 下编写可加载LSM模块的问题

我是Linux内核编程领域的新手,正在学习Linux Security Module(LSM)。目前查阅的资料(包括相关视频)都是将编写的模块编译进内核,再把完整编译后的内核安装到Ubuntu等机器上测试,但我希望编写一个可按需加载、卸载的模块,以便便捷测试功能正确性。

按照视频里的方法,我用security_add_hooks将自定义函数绑定到安全子系统,同时用到了依赖security_hook_heads结构体的LSM_HOOK_INIT,但生成.ko文件时出现以下错误:

ERROR: modpost: "security_add_hooks" [security/my_test.ko] undefined!
ERROR: modpost: "security_hook_heads" [security/my_test.ko] undefined!

我明白security_add_hooks是未向模块导出的函数,于是尝试添加EXPORT_SYMBOL(security_add_hooks)让.ko文件可调用它,但又遇到security_hook_heads和security_hook_list两个结构体的导出问题。我尝试在lsm_hooks.h中结构体定义后添加导出语句:

struct security_hook_heads {
    #define LSM_HOOK(RET, DEFAULT, NAME, ...) struct hlist_head NAME;
    #include "lsm_hook_defs.h"
    #undef LSM_HOOK
} __randomize_layout;

EXPORT_SYMBOL(security_hook_heads);

却得到错误:

./include/linux/lsm_hooks.h:1601:15: error: ‘security_hook_heads’ undeclared here (not in a function)
 1601 | EXPORT_SYMBOL(security_hook_heads);

我推测该错误是因无法从头文件导出符号,但无法解决此问题。

另外,我查阅的一些旧资料里使用register_security和unregister_security函数实现可加载LSM,但这些函数在Linux 6.0.0及以上的最新内核中已不存在。

请问是否有其他简便方法实现可加载、卸载的LSM模块?

内容的提问来源于stack exchange,提问作者Abhishek Ghosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:50:27