【发布时间】:2020-05-01 09:26:36
【问题描述】:
问题是禁止访问某些文件(来自我的“黑名单”的文件)。这意味着除了我(我自己的内核模块)之外没有人可以读取或修改这些文件。
我已经在 StackOverflow 上问过这个问题,但我没有得到答案。只有一种解决方案可以更改文件的权限和文件的所有者。但是,这对我的目标来说还不够,因为文件的权限以及文件的所有者很容易被其他人修改。
但我没有放弃,我一直在研究这个问题。
我用指向我自己函数的指针替换了系统调用表的一些字段。因此,我设法禁止任何 USER 模块从我的黑名单中访问文件;此外,这种方法不依赖于文件的权限或文件的所有者。然而,关键词是“用户模块”。我的意思是任何内核模块仍然可以通过调用例如filp_open() 函数轻松访问我的黑名单中的文件。我查看了 Linux 代码源,结果发现我挂钩的所有这些系统调用(open、openat、...)都是简单的包装器,仅此而已。
你能帮帮我吗?有没有办法用filp_open 做一些类似于我对系统调用所做的事情?欢迎任何其他解决方案(没有挂钩)。
【问题讨论】:
-
不,这绝对不可能。您需要独立的硬件。
-
阻止对一组文件的访问不是您的问题……这是您对未告诉我们任何问题的问题的解决方案。如果您告诉我们为什么您想这样做(即实际问题是什么),我们或许可以提供不同的解决方案。
-
@FelixG 说得很好,这看起来像XY problem。
-
好的,我会尝试更详细地解释它。有一些模块(我不对它们负责,它们是由其他程序员设计的)将它们的配置数据存储在文件中(因为 Linux 中没有注册表)。我的内核模块必须使用配置数据保护这些文件免受任何外部修改。当然,允许进行一些修改,但只能通过我的模块(ioctls 请求);但是这已经是工作的其他部分,现在我只是寻找一种方法来禁止所有外部模块访问这些文件。
-
@StaTik 我看到这里存在术语问题。 1) 用户空间应用程序是不是模块,它们是用户空间应用程序。内核模块是另一回事。 2) 你为什么要担心其他预先存在的内核模块修改你的文件?他们为什么要这样做?这没有道理。 3)请参阅下面我的回答,了解为什么甚至“保护”用户空间也不是那么简单。
标签: c linux security linux-kernel