Ich schrieb ein Programm, das als Session-Service über dbus läuft.
Ich wollte es als System-Service (Erstellen eines dbus.SystemBus-Bus-Namen) laufen lassen, wenn es von root (UID 0) ausgeführt wird.
Ich versuche, für dbus.SystemBus zu laufen, was ich derzeit für dbus.SessionBus ausführen, aber einen Richtlinienfehler erhalten.
Der Code (Python, aber es ist nicht wirklich wichtig), von allem unnötigen gelöscht, ich laufe, ist dies:DBus SystemBus Policies
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()
und erhalten:
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
FYI, dass ich den dbus-Dienst (Centos 7) neu laden musste: '' 'systemctl reload dbus''', damit dies funktioniert – Joris