我编写了一个内核模块,它创建一个 /proc 文件并从用户程序读取写入其中的值,比如 user.c
现在我想限制这个 /proc 文件的权限。我通过检查 current->euid 使用“当前”内核变量基于用户 ID 限制了权限。
我的问题:有没有办法根据程序来限制这个?即只有 user.c 应该能够写入这个 proc 文件而不是任何其他程序。我在 task_struct 中找不到任何可以帮助我做到这一点的参数。你能建议一种方法吗?
我编写了一个内核模块,它创建一个 /proc 文件并从用户程序读取写入其中的值,比如 user.c
现在我想限制这个 /proc 文件的权限。我通过检查 current->euid 使用“当前”内核变量基于用户 ID 限制了权限。
我的问题:有没有办法根据程序来限制这个?即只有 user.c 应该能够写入这个 proc 文件而不是任何其他程序。我在 task_struct 中找不到任何可以帮助我做到这一点的参数。你能建议一种方法吗?
在您的 proc writer 实现(即内核模块内部)中,您能做的最好的事情是检查 current(一个结构任务 *)的值,它包含(除其他外)有价值的字段,例如 comm(16 个字符的 argv[ 0])、pid、uid 等(基本上,您在 /proc//status 中看到的所有内容。您还可以检查原始 exe 名称(就像您在 /proc//exe 中看到的那样),看看它是否是众所周知的路径. 然后你可以返回一个错误。
警告:如果您使用“comm”,任何人都可以将他们的打开过程重命名为您的“允许”程序之一,并且有办法击败“exe”保护。这只会使它稍微难一些,但对某人来说并非不可能。更全面和更强大的解决方案需要您查看程序的用户模式内存,这是可能的,但是对于简短的答案来说太复杂了。
注意:权限参数不起作用,甚至不要打扰。它们使用经典的 UNIX ACL,即 u/g/o - 因此您不能按 PID 进行过滤。