验证GTK应用程序以使用root权限运行

Tho*_*ann 12 linux gtk permissions root

我有一个用于Linux的UI应用程序(使用GTK),需要以root身份运行(它读取和写入/ dev/sd*).

每次启动我的应用程序时,我都不想要用户打开root shell或手动使用"sudo",我想知道该应用程序是否可以使用某些操作系统提供的API来获取root权限.(注意:gtk应用程序不能使用"setuid"模式,因此这里不是一个选项.)

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

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

我想知道Linux是否有类似的东西(例如Ubuntu)

澄清:

所以,在PolicyKit的提示后,我想知道我是否可以使用它来获得对"/ dev/sd ..."块设备的r/w访问.我觉得这篇文章很难理解,所以我想在我花费数小时试图理解它之前我先问这是否可能.

更新:

该应用程序是一个远程操作的磁盘修复工具,为不称职的Linux用户,这些Linux新手不会太多了解使用sudo甚至更改其用户的组成员身份,特别是如果他们的磁盘刚开始表现,他们吓坏了.这就是为什么我寻求避免像这样的技术性的解决方案.

pto*_*ato 6

旧的方式,简单但现在被逐步淘汰,是GKSu以下是关于 GKSu 未来的讨论。

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

更新:

如果看一下示例代码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()with将其从 GUI 应用程序中运行pkexec。这样你就不必费心去请求操作之类的了。无论如何,以 root 身份运行整个 GUI 应用程序可能是不好的做法。

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

  • 嗯,我认为 PolicyKit API 允许您实现同样的事情,但是是在您的程序中实现的。但我不确定。 (2认同)