首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dbus和policykit的根任务

使用dbus和policykit的根任务
EN

Ask Ubuntu用户
提问于 2012-07-04 21:37:00
回答 1查看 3.3K关注 0票数 10

在某些时候,我的应用程序需要执行一些管理任务,比如在/etc中创建一个文件,或者使用root priveleges运行命令。

我知道你可以做个问答:

代码语言:javascript
复制
os.popen("pkexec foo bar")

但我也知道,这不是预料中的干净的方法。对用户来说有些烦人,因为他总是需要重新输入密码,而不是进行类似会话的处理。

当我找到用于身份验证的python示例时,我非常乐观。

这是一个简单的例子,它可以立即工作:

代码语言:javascript
复制
import dbus

bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy,  dbus_interface='org.freedesktop.PolicyKit1.Authority')

system_bus_name = bus.get_unique_name()

subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1            # AllowUserInteraction flag
cancellation_id = '' # No cancellation id

result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)

print result

我一直很天真地认为,在授权之后,我可以在脚本中使用一些os.popen()-commands。现在我更清楚了:

我可以在上面的例子中看到元组结果,但是在进一步的文档中,我找不到一个可以继续下去的工作代码。

我和这个结果有什么关系?我怎样才能继续执行我需要的任务呢?是否有提供可用方法的示例的python引用?

我试图通过使用dir()列出授权方法,但是找不到如何继续下去的线索。

我真的想避免使用我的后援,但这将是我最后的选择。请帮我做正确的事:)

感谢并致以问候

安德雷

编辑:

由于我没有把它带来工作,而我以前的解决方案用gksu启动我的程序并不能在/opt/中工作,所以我最终不得不放弃,并实现了上千个密码请求,以使程序基本工作,在应用程序摊牌中至少有一件T恤。

我没有注意到这个问题,因为我第一次做了一个快速的分享。一切都很正常。一开始问一次密码。我现在很沮丧。我对AppShowdown的贡献是https://launchpad.net/armorforge。;-(

EN

回答 1

Ask Ubuntu用户

发布于 2012-11-11 23:24:24

首先需要掌握一个基本概念: PolicyKit只处理授权,而不是权限提升。PolicyKit将回答以下问题:“用户是否授权执行此任务?”,但它不会给您根权限。

常用的模型是创建一个以根权限运行的DBus系统服务。它将接收来自非根进程的请求,使用PolicyKit确定是否授权该进程提出该请求,然后执行所请求的任务。

几年前我写了一个关于PolicyKit和DBus与Python在ubuntuforums.org上的教程。这些原则是相同的,尽管它可能需要一些更新。我现在要上床睡觉了,所以看一看,如果需要更新,请告诉我。

票数 7
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/159722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档