(This question具有相同的标题,但问题正文以脚本的角度提出问题,例如su -c
,不要将其与此相符)
我有一个Qt GUI应用程序需要根据用户输入在/ etc中执行一些文件操作。一个选项可能会将system()
与sudo
一起使用,但即使这样也需要在某些时候弄乱sudoers
文件。我也不想做system()
加脚本黑客来修改文件,但是正确的文件操作。
以编程方式提升我的应用程序权限的最佳方法是什么?
编辑:作为奖励,它会很好,如果它也适用于Maemo / Meego /其他手持设备(afaik PolicyKit在那里不可用..)
答案 0 :(得分:4)
你可以使用PolicyKit,它逐渐取代gksu / su / sudo,特别是在Ubuntu上,因为它提升了动作而不是整个程序,因此具有更高的安全性和细粒度控制。
答案 1 :(得分:4)
我会写一个单独的程序。这个philosophy的内容。基本上 - 编写一个完全符合您需要的简单程序,并使用文件系统上的文件权限控制其行为。主要是,
在setuid程序中尽可能少地执行。
setuid程序必须在a中运行 非常危险的环境:用户是 在完全控制其fds的情况下, args,environ,cwd,tty,rlimits, 定时器,信号等。更糟, 受控物品清单各不相同 从一个供应商的UNIX到下一个,所以 写便携式非常困难 代码可以清理所有内容。
最近二十个sendmail中的一个 安全漏洞,十一只工作 因为整个sendmail系统都是 的setuid。
只有一个qmail程序是setuid: qmail的队列。它的唯一目的是 向传出添加新邮件 队列中。
而且,
尽可能少地以root身份执行。
整个sendmail系统运行为 root,所以没有办法 错误可以被抓住 操作系统的内置功能 保护。相比之下,只有两个 qmail程序,qmail-start和 qmail-lspawn,以root身份运行。
答案 2 :(得分:1)
创建一个帮助器setuid program,它只执行您想要执行的操作,并fork / exec从中执行您的应用程序。然后删除子进程中的权限。两个应用程序都可以通过管道,套接字或类似的东西进行通信。
请记住,setuid程序存在安全风险,因此在实施时应该非常小心。