【问题标题】:DBus SystemBus policiesDBus SystemBus 政策
【发布时间】:2012-06-25 13:46:50
【问题描述】:

我编写了一个通过 dbus 作为会话服务运行的程序。
如果由 root (uid 0) 执行,我想让它作为系统服务运行(创建 dbus.SystemBus 总线名称)。
我正在尝试为 dbus.SystemBus 运行我目前为 dbus.SessionBus 运行的程序,但出现策略错误。
代码(python,但它并不重要),从所有不必要的东西中清除,我运行的是这样的:

import gobject
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop

DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()

class dbusService(dbus.service.Object):
    def __init__(self):
        bus_name = dbus.service.BusName('org.testobj.service', bus=dbus.SystemBus())
        dbus.service.Object.__init__(self, bus_name, '/org/testobj/service')

a = dbusService()

然后得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __init__
  File "/usr/lib/python2.7/site-packages/dbus/service.py", line 131, in __new__ retval = bus.request_name(name, name_flags)
  File "/usr/lib/python2.7/site-packages/dbus/bus.py", line 303, in request_name 'su', (name, flags))
  File "/usr/lib/python2.7/site-packages/dbus/connection.py", line 651, in call_blocking message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.AccessDenied: Connection ":1.48" is not allowed to own the service "org.testobj.service" due to security policies in the configuration file

【问题讨论】:

    标签: dbus policy


    【解决方案1】:

    使用上述示例的最简单方法是编辑/etc/dbus-1/system.conf 并添加以下行:

    <policy>
        ...
        <allow own="org.testobj.service"/>
    </policy>
    

    Relevant documentation.

    【讨论】:

    • 仅供参考,我需要重新加载 dbus 服务(Centos 7):systemctl reload dbus 才能正常工作
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2014-03-07
    • 2011-06-14
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多