我有一个用于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甚至更改其用户的组成员身份,特别是如果他们的磁盘刚开始表现,他们吓坏了.这就是为什么我寻求避免像这样的技术性的解决方案.
美好的一天
背景:
我正在为Linux系统创建一个OpenVPN包装器应用程序,该应用程序即将完成.我遇到了一些障碍.
OpenVPN需要root访问权来修改路由表(添加和删除路由).这是事情变得模糊和混乱的地方.
希望通过扩展这个问题,可以分享一些行业标准答案和解决方案.
文档:
因此,经过几个小时的搜索,我编制了一个获取root访问权限的可能方法列表,但是似乎没有一个是官方的,也没有任何真正可靠的指导来获得这个SU特权.
让我们考虑以下方法.
1.使用pkexec和polkits
请在此处和此处查找官方freedesktop polkit文档,以获取有关最佳实践的一些信息
使用pkexec和polkits在线发现了一些教程 - 这里,这有助于我创建我的polkit文件.- SO Thread - 和一个可爱的Qt应用程序小教程
简要解释(我的理解)关于pkexec和polkits:
polkits: polkits由行动和规则组成(参见深入阅读和解释的文件).它定义了应用程序的操作以及与之关联的规则.规则可以定义为属于特定组的用户,其中操作查询规则,成功传递规则,用户自动进行身份验证(没有弹出密码提示),否则他们需要输入管理员密码
pkexec: 用于与polkit操作进行交互并对应用程序进行身份验证以获取root访问权限的应用程序.
这些需要在其中添加动作/usr/share/polkit-1/actions/和/usr/share/polkit-1/rules.d/(在其他目录中,请参阅所有位置的文档)
这种方法似乎很好用(但需要更多的解释才能轻松理解,imo)
注意:有qt-polkit可供使用的库,请参阅其 github存储库
对于简单的TL; DR版本,请参阅此内容
我创建的polkit文件(注意这可能不正确,但它对我有用):
可以找到/添加的位置(还有其他位置)
/usr/share/polkit-1/actions
Run Code Online (Sandbox Code Playgroud)
策略工具包文件名:com.myappname.something.policy // .policy是必需的
注意:
com.myappname.something
Run Code Online (Sandbox Code Playgroud)
被称为政策的命名空间(阅读文档,这将不清楚)
政策套件内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD polkit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/software/polkit/policyconfig-1.dtd">
<policyconfig>
<vendor>My App …Run Code Online (Sandbox Code Playgroud)