Permissions 根据试图访问内核模块的程序设置权限

Permissions 根据试图访问内核模块的程序设置权限,permissions,linux-kernel,kernel,Permissions,Linux Kernel,Kernel,我编写了一个内核模块,它创建一个/proc文件,并从用户程序(比如user.c)读取写入其中的值 现在我想限制这个/proc文件的权限。我通过选中current->euid,使用'current'内核变量,基于userid限制了权限 我的问题是:有没有一种方法也可以基于程序来限制这一点?i、 e.只有user.c才能写入此proc文件,而不能写入任何其他程序。我在task_struct中找不到任何有助于我执行此操作的参数。您能建议一种方法吗?在proc-writer实现中(即在内核模块内部),您

我编写了一个内核模块,它创建一个/proc文件,并从用户程序(比如user.c)读取写入其中的值

现在我想限制这个/proc文件的权限。我通过选中current->euid,使用'current'内核变量,基于userid限制了权限


我的问题是:有没有一种方法也可以基于程序来限制这一点?i、 e.只有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进行筛选。

打开文件时,请同时使用权限参数。请参阅下面的链接