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

Linux内核6.x编写LSM阻止文件删除的正确实现方法

内核6.x版本下编写阻止文件删除的LSM模块正确方法

内核5.10及以后版本(包括6.x)对LSM模块的注册机制做了重大调整,不再允许模块直接调用security_add_hooks或访问security_hook_heads(这两个符号已不再导出给外部模块),必须使用新的宏定义来完成LSM注册。以下是完整的实现方案:

1. 完整LSM模块代码(my_lsm.c)

#include <linux/init.h>
#include <linux/module.h>
#include <linux/lsm_hooks.h>
#include <linux/fs.h>
#include <linux/sched.h>

// 自定义inode_unlink钩子:阻止文件删除
static int my_inode_unlink(struct inode *dir, struct dentry *dentry)
{
    // 可添加条件判断,比如只阻止特定用户/路径的删除
    pr_info("Blocked delete attempt for file: %s\n", dentry->d_name.name);
    return -EPERM; // 返回错误码阻止删除操作
}

// 定义LSM钩子数组,使用LSM_HOOK_INIT初始化
static struct security_hook_list my_lsm_hooks[] __lsm_ro_after_init = {
    LSM_HOOK_INIT(inode_unlink, my_inode_unlink),
    // 可添加更多需要的钩子函数
};

// 声明LSM钩子集合
LSM_DECLARE(my_lsm, my_lsm_hooks);

// 模块初始化函数
static int __init my_lsm_init(void)
{
    pr_info("my_lsm loaded successfully\n");
    return 0;
}

// 模块退出函数
static void __exit my_lsm_exit(void)
{
    pr_info("my_lsm unloaded successfully\n");
}

module_init(my_lsm_init);
module_exit(my_lsm_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple LSM to block file deletion");
MODULE_AUTHOR("Your Name");

2. 对应的Makefile

obj-m += my_lsm.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) clean

3. 编译与加载注意事项

  • 内核配置要求:必须确保内核开启了CONFIG_LSM_MODULES=y(可通过zcat /proc/config.gz | grep CONFIG_LSM_MODULES验证),如果未开启,需要重新编译内核并开启该选项。
  • 加载模块:加载模块前需要将自定义LSM添加到内核启动参数的lsm列表中,例如修改/etc/default/grub中的GRUB_CMDLINE_LINUX,添加lsm=lockdown,yama,my_lsm(顺序会影响钩子执行优先级),然后更新grub并重启系统。之后即可用insmod my_lsm.ko加载模块。
  • 验证功能:尝试删除文件时,会被钩子拦截,内核日志(dmesg或/var/log/kern.log)会输出对应的拦截信息,文件删除操作会失败。

关键变化说明

  • 不再使用security_add_hooks注册钩子,而是通过LSM_HOOK_INIT定义钩子项,结合LSM_DECLARE声明钩子集合,最终由内核自动处理钩子注册。
  • __lsm_ro_after_init属性用于标记钩子数组在初始化后只读,符合内核安全规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:07:38