4

这个问题有相同的标题,但是问题主体从脚本的角度来询问它,例如su -c,不要把这个当成那个)

我有一个 Qt GUI 应用程序,它需要根据用户输入在 /etc 中执行一些文件操作。一个选项可能会使用system()with sudo,但即使这样也需要sudoers在某些时候弄乱文件。我也不想做system()加脚本黑客来修改文件,而是正确的文件操作。

以编程方式提升我的应用程序权限的最佳方法是什么?

编辑:作为奖励,如果它也可以在 Maemo/Meego/其他手持设备上工作会很好(afaik PolicyKit 在那里不可用..)

4

3 回答 3

4

您可以使用 PolicyKit,它正在逐渐取代 gksu/su/sudo,尤其是在 Ubuntu 上,因为它具有更高的安全性和细粒度的控制,因为提升了操作,而不是整个程序。

于 2010-09-16T12:07:29.040 回答
4

我会完全编写一个单独的程序。符合这种哲学的东西。基本上 - 编写一个完全符合您需要的简单程序,并使用文件系统上的文件权限控制其行为。主要是,

在 setuid 程序中尽量少做

setuid 程序必须在非常危险的环境中运行:用户完全控制其 fds、args、environ、cwd、tty、rlimits、计时器、信号等。更糟糕的是,受控项目列表从一个供应商的 UNIX 到下一个供应商都不相同,因此很难编写可移植的代码来清理所有内容。

在最近的 20 个 sendmail 安全漏洞中,有 11 个仅因为整个 sendmail 系统是 setuid 而起作用。

qmail程序只有一个setuid:qmail-queue。它的唯一目的是将新邮件消息添加到传出队列。

和,

尽可能少做 root

整个 sendmail 系统以 root 身份运行,因此操作系统的内置保护无法捕捉到它的错误。相比之下,只有两个 qmail 程序 qmail-start 和 qmail-lspawn 以 root 身份运行。

于 2010-09-16T12:27:30.910 回答
1

创建一个只做你想做的事情的助手setuid 程序,并从中分叉/执行你的应用程序。然后在子进程中删除权限。两个应用程序都可以通过管道、套接字或类似的东西进行通信。

请记住,setuid 程序存在安全风险,因此在实施时应该非常小心。

于 2010-09-16T13:08:55.470 回答