授予用户更改 IRQ/root 进程优先级的权限

授予用户更改 IRQ/root 进程优先级的权限

在 Linux 中,是否可以允许用户更改 root 拥有的进程的优先级?更具体地说是 IRQ 进程?

对于嵌入式实时应用程序,我想提高 GPIO IRQ 的优先级,因为这会带来更好的结果。然而,这些都是 root 拥有的。如果能够在不使用 root 权限的情况下提高 root 进程的优先级,那就太好了。

答案1

我喜欢做的是编写一个可以为我完成此任务的特定工具。

int main(int argc, char * argv[])
{
    setuid(0);
    system("renice <params>");
}

我编译并安装在/usr/bin.

如果尚未将所有者设置为 root:

chown root /usr/bin/my-renice

然后我用以下命令更改权限:

chmod 4755 /usr/bin/my-renice

第一个4位告诉二进制文件在所有者的许可下执行(root如我们上面设置的),无论谁调用它。请参阅man setuid获取更多信息。

请注意,如果您有权访问该计算机的用户不应运行该 renice,那么这并不是 100% 安全的。

尤其:不要将任何命令行参数传递给system()调用。

system(argv[1]);   // <-- definitely a total security breach!

我发现这个解决方案在只有几个进程和几个值得信赖的用户的计算机上最简单。

相关内容