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

Linux 6.x内核下如何通过eBPF LSM钩子精准拦截文件删除?

问题分析与解决方案

你的eBPF LSM程序加载成功但未生效,核心原因是BPF LSM模块未被内核激活,同时可能存在钩子使用细节问题,以下是具体排查和解决步骤:

1. 确认BPF LSM已加入内核激活列表

即便编译内核时开启了CONFIG_BPF_LSM=y,内核默认也可能不会将BPF LSM纳入active LSM管控链:

  • 查看当前启用的LSM模块:
    cat /sys/kernel/security/lsm
    
    若输出不含bpf,说明BPF LSM未激活。
  • 临时激活:修改内核启动参数,在原有LSM列表后追加bpf(比如原参数为lsm=apparmor,改为lsm=apparmor,bpf),重启系统生效。
  • 永久生效:编辑GRUB配置文件(如/etc/default/grub),在GRUB_CMDLINE_LINUX字段中加入lsm=...,bpf,执行update-grub后重启。

2. 修正钩子函数签名(可选但推荐)

你的代码使用void *ctx作为参数虽合法,但显式声明钩子的标准参数可提升兼容性:

#include <linux/path.h>
#include <linux/dentry.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <bpf/bpf_helpers.h>

SEC("lsm/path_unlink")
int BPF_PROG(security_path_unlink, struct path *dir, struct dentry *dentry) {
    return -EPERM;
}

char LICENSE[] SEC("license") = "GPL";

3. 确保程序正确附加到钩子

部分内核版本中,仅用bpftool prog load加载程序不会自动绑定到LSM钩子,需显式创建链接:

  • 加载程序后,用bpftool prog show获取程序ID(例如你的示例中是93)
  • 创建链接:
    bpftool link create prog 93 type lsm
    
    可用bpftool link show验证链接状态。

4. 测试验证

完成上述操作后,尝试删除文件:

rm test.txt

若收到Operation not permitted错误,说明eBPF程序已生效。


内容的提问来源于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 19:15:54