首页 > 解决方案 > 在内核 5.x 中编写简单的 lsm

问题描述

我正在尝试编写一个什么也不做的简单 lsm 模块。但我有几个问题。

static int rdwn_task_kill(
    struct task_struct* p,
    struct siginfo *info,
    int sig, 
    u32 secid
) {
        return 0;
}

static struct security_hook_list rdwn_hooks[] = {
        LSM_HOOK_INIT(task_kill, rdwn_task_kill)
};


static __init rdwn_init(void) {
        
    security_add_hooks(rdwn_hooks, ARRAY_SIZE(rdwn_hooks), "rdwn");

    printk(KERN_INFO "RDWN:  Initializing.\n");

    return 0;
} 

// How to load module??     
 

如您所知,在以前的内核版本中,编写和加载 lsm 更加简单。但是现在,我对此感到非常困惑。以前,有一些功能,如security_initcall. 但是现在呢???如何在内核 5 及更高版本中加载 lsm?我查看了其他 lsm 代码,例如 selinux 和 apparmor,它们被用于DEFINE_LSM定义结构的宏,仅此而已(实际上我再也看不到了)。够了吗?这是加载lsm的正确方法吗?如果我module_init全部使用实例会发生什么???最后,将 lsm 注册并加载到内核中的真正方法是什么?

其他问题:当我编译上面的代码时(当我完成时),我得到类似这样的错误:

error modpost: security_add_hooks undefined! 

error modpost: security_hook_heads undefined! 

这是什么?为什么我会收到这些错误?有趣的是,当我实现自己的 struct_add_hooks 和 security_hook_heads (相同但名称不同)时,此错误消失了。为什么?

任何人都可以帮助我实施一个好的 lsm 吗?:)

标签: linuxkernel

解决方案


推荐阅读