15

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

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

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

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

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

澄清:

因此,在 PolicyKit 的提示之后,我想知道是否可以使用它来获得对“/dev/sd ...”块设备的读写访问权限。我发现文档很难理解,所以我想我首先要问这是否可能,然后再花几个小时试图徒劳地理解它。

更新:

该应用程序是为不精通 Linux 用户的远程操作磁盘修复工具,那些 Linux 菜鸟不会对使用 sudo 甚至更改其用户的组成员有太多了解,特别是如果他们的磁盘刚刚开始出现故障并且他们吓坏了. 这就是为什么我寻求一种避免此类技术问题的解决方案。

4

1 回答 1

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 列表。

于 2010-03-08T14:06:47.443 回答