c-如何禁止其他Linux内核模块访问一些常规文件



问题是禁止访问某些文件(我的"黑名单"中的文件(。这意味着除了我(我自己的内核模块(之外,没有人可以读取或修改这些文件。

我已经在StackOverflow上问过这个问题,但我还没有得到答案。只有一个解决方案可以更改文件的权限和文件所有者。然而,这对我的目标来说还不够,因为其他人可以很容易地修改文件的权限和文件的所有者。

但是我没有放弃,我一直在研究这个问题。

我用指向自己函数的指针替换了系统调用表中的一些字段。因此,我设法禁止任何USER模块访问我的黑名单中的文件;此外,这种方法不依赖于文件的权限或文件的所有者。然而,关键词是"用户模块"。我的意思是,任何内核模块仍然可以通过调用例如filp_open()函数来轻松访问我的黑名单中的文件。我查看了Linux的代码源,发现我挂接的所有这些系统调用(openopenat…(都是简单的包装器,不再是了。

你能帮我吗?有没有一种方法可以用filp_open做一些类似于我对系统调用所做的事情?欢迎任何其他解决方案(无挂钩(。

你想要的是不可能的理论上,这可以通过在定制的系统管理程序下运行内核或在定制的硬件上运行来实现,但在现实中实现这将是极其复杂的(如果不是不可能的话(。

您无法保护内核不受其自身影响。在任何正常情况下(即没有专用硬件或系统管理程序(,Linux内核在机器上以最高权限级别运行,因此如果需要,可以恢复您所做的任何更改。如果您的模块需要拒绝整个内核访问某些文件,那么您所做的工作在概念上确实存在问题。此外,您似乎在假设其他内核模块会以某种方式"感兴趣"干扰您的模块:为什么会出现这种情况?

此外,即使更改权限或覆盖系统调用也不能解决任何问题:除非正确地配置内核锁定(kernel>=v5.4(和/或其他一些安全措施,如模块签名(理想情况下还有安全引导(,否则root用户总是能够插入模块并破坏您的"安全"措施。

如果您需要剥夺root对这些文件的访问权限,那么正如我所说,确实存在逻辑错误。root用户已经可以对任何想要的配置文件为所欲为,当然,销毁重要的配置文件会破坏系统,但这并不是你真正可以避免的。假设root是邪恶的,在任何正常情况下作为威胁模型都没有多大意义。

相关内容

  • 没有找到相关文章

最新更新