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