以编程方式请求Linux中的提升权限

时间:2010-09-16 12:04:19

标签: linux qt root maemo root-access

This question具有相同的标题,但问题正文以脚本的角度提出问题,例如su -c,不要将其与此相符)

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

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

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

3 个答案:

答案 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程序存在安全风险,因此在实施时应该非常小心。