2010-03-08 242 views
10

我有一个Linux应用程序(使用GTK),需要以root用户身份运行(它读取和写入/ dev/sd *)。认证GTK应用程序以root权限运行

,而不需要用户打开一个root shell,或当他启动我的应用程序中使用“命令”手动每一次的,我不知道是否该应用程序可以使用一些操作系统提供的API来获得root权限。 (注意:gtk应用程序不能使用“setuid”模式,所以这不是一个选项。)

这里的优势是更简单的工作流程:用户可以从他的默认用户帐户双击我的应用程序桌面,而不必打开根终端并从那里启动它。

我问这个问题是因为OS X提供了这个:一个应用程序可以要求操作系统启动一个带有根权限的可执行文件 - 操作系统(而不是应用程序)然后要求用户输入他的凭证,验证它们然后启动目标根据需要。

我不知道是否有类似的针对Linux(Ubuntu的,如)东西

澄清:

所以,在PolicyKit的提示我不知道如果我可以用它来获得R/W后访问“/ dev/sd ...”块设备。我发现这些文档很难理解,所以我想我会先花一点时间试着去理解它,然后再问这是否可能。

更新:

该应用程序是为unsavvy的Linux用户远程操作的磁盘修复工具,以及那些Linux的菜鸟不会有使用sudo,甚至改变他们的用户的组成员太多了解,特别是如果他们的磁盘刚刚开始动作,他们就会吓坏了。这就是为什么我寻求避免这种技术问题的解决方案。

+0

确实有可能像这样设置 - 例如,新立得软件包管理器通常是这样设置的。 – caf 2010-03-08 12:11:17

+0

我不确定你应该真的想以root身份运行。如果您只需要访问磁盘,最好将用户添加到“磁盘”组。 – 2010-03-08 23:25:40

+0

米兰 - 我的应用程序充当一次性磁盘修复工具。我不认为任何想使用它的人都愿意永久性地改变他的系统范围的设置。 – 2010-03-08 23:30:23

回答

3

旧的方式,简单,但现在被淘汰,是GKSuHere是关于GKSU未来的讨论。

新的方法是使用PolicyKit。我不太确定这是如何工作的,但我认为您需要使用pkexec命令启动您的应用程序。

UPDATE:

综观上http://hal.freedesktop.org/docs/polkit/polkit-apps.html示例代码,似乎可以用PolicyKit的获得授权某些行动这是由.policy文件/usr/share/polkit-1/actions描述。作为另一用户执行程序的动作是org.freedesktop.policykit.exec。我似乎无法找到直接访问块设备的操作,但我必须承认,PolicyKit文档也会打乱我的大脑。

因此,对于您来说,最简单的做法可能是将需要权限的磁盘碎片代码分离到命令行实用程序中,然后使用g_spawn_[a]sync()pkexec从GUI应用程序运行该程序。这样你就不必费心去请求行动和类似的事情。无论如何,以root身份运行整个GUI应用程序可能是不好的做法。

另一个建议是直接询问PolicyKit(David Zeuthen)的作者。或者尝试将您的问题发布到gtk-app-devel列表中。

+0

我试过pkexec - 不幸的是,它在我的情况下不起作用,因为我收到以下错误消息:“Gtk-Warning **:无法打开显示:” - “man pkexec”解释了原因: “PROGRAM将运行它的环境将被设置为已知和安全的最小环境,以避免通过 LD_LIBRARY_PATH或类似机制注入代码。另外,将PKEXEC_UID 环境变量设置为调用 pkexec的进程的用户标识。因此,pkexec不允许您运行例如X11 作为另一个用户的应用程序,因为$ DISPLAY环境变量是 未设置。“ Darn。 – 2010-03-08 23:19:05

+1

嗯,我认为PolicyKit API可以让你实现同样的事情,但是在你的程序中。虽然我不确定。 – ptomato 2010-03-09 09:08:27

+0

因为没有寄给我关于你的更新,所以我现在只看到它。感谢您付出额外的努力,我认为我可以提前获得这些信息。 – 2010-03-17 18:09:31

相关问题