(这个问题 具有相同的标题,但是问题主体以脚本的角度提出要求,例如 su -c, ,不要为此欺骗)

我有一个QT GUI应用程序,需要根据用户输入在 /etc中执行一些文件操作。一个选项可能会使用 system()sudo, ,但即使那需要弄乱 sudoers 在某个时刻文件。我也想不做 system() 加上脚本hacks以修改文件,但要正确的文件操作。

在编程上提升我的应用程序权利的最佳方法是什么?

编辑:作为奖励,如果在Maemo/Meego/其他手持式上也可以使用(Afaik PromistKit在那里也不可用。

有帮助吗?

解决方案

我将完全编写一个单独的程序。沿着这条线 哲学. 。基本上 - 编写一个简单的程序,可以准确地完成您需要的操作,并通过文件系统上的文件权限控制其行为。主要是

在setuid程序中尽可能少地做.

SETUID程序必须在非常危险的环境中运行:用户完全控制其FDS,ARGS,Environ,CWD,TTY,RILILITS,TIMES,TIMES,信号等。更糟糕的是,受控项目的列表从一个供应商的UNIX到另一个供应商的列表,因此很难编写清理所有内容的便携式代码。

在最近的二十个SendMail安全孔中,仅是因为整个Sendmail系统都是固定的。

只有一个qmail程序是setuid:qmail-quesue。它的唯一目的是在外出队列中添加新的邮件。

和,

尽可能少做.

整个SendMail系统都以根而运行,因此无法通过操作系统的内置保护捕获其错误。相比之下,只有两个Qmail程序,即Qmail-start和Qmail-lspawn作为root运行。

其他提示

您可以使用逐渐取代GKSU/su/sudo的PolicyKit,尤其是在Ubuntu上,因为其更高的安全性和细粒度的控制 动作, ,不是整个程序。

创建一个助手 setuid程序 那只能做您想做的事情,并且 叉 / exec 您的应用程序。然后在儿童过程中放弃特权。两种应用都可以通过管道,插座或类似的东西进行通信。

请记住,setuid程序是安全风险,因此实施一个程序时,您应该非常小心。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top