如果共享对象的调用者不是其中之一,是否可以强制共享对象以 root 身份运行或使用 setuid 或 setgid?

如果共享对象的调用者不是其中之一,是否可以强制共享对象以 root 身份运行或使用 setuid 或 setgid?

我的应用程序需要具有对 /dev/input/event* 的写访问权限。在我的 Ubuntu 系统上 /dev/input/event* 属于 root:input。如果我使用 sudo,我的应用程序运行良好,但我试图避免这种情况。因此,我将我的应用程序设置为“输入”组并使用 setgid 运行。但它是一个跨平台应用程序(GTK),可以检测并禁止这种情况。 (它的字面意思是 GTK 已检测到它正在尝试作为 setgid 或 setuid 运行,但它不会允许这样做。)但实际上是 .so 文件想要写入 /dev/input/event*。如果我可以允许这个 .so (状态良好并且不会经常更改)以 root 身份运行,我会感觉好多了。或者,如果 .so 文件必须作为 setgid 运行,则 GTK 环境可能无法检测到它。我尝试在 .so 文件上设置特殊位,但是当我运行该应用程序时,它在 /dev/input/event* 上存在相同的权限问题。

答案1

权限是按进程(实际上是 Linux 中的每个线程)跟踪的,而不是按加载运行进程的对象文件跟踪的。因此,您无法将不同的权限与.so文件关联。

作为建议经过安迪道尔顿,一种常见的处理方式是拥有一个小的帮助程序二进制文件,并确保它具有适当的权限(使用权限,或能力, ETC。)。

另一种可能性是添加udev规则,以向您的用户或控制台上的任何人授予事件设备上的权限。

相关内容