zimio
zimio

Reputation: 107

How to get root premissions for my app?

My app needs to do some privileged work. I've been looking everywhere, but I can't find anything useful. I know I want to use Policykit1 and dbus because all the other alternatives I've found aren't used anymore.

This is the code I got so far:

import dbus
import os

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 i


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

os.makedirs('/usr/local/share/somefolder')

I can't make the directory, what am I doing wrong?

Upvotes: 3

Views: 814

Answers (1)

jathanism
jathanism

Reputation: 33724

Filesystem security is stopping you because your user doesn't have write permissions to /usr/local/share/somefolder. You could use sudo to temporarily escalate permissions for that directory creation. But it doesn't stop there if you need to perform more operations as superuser.

If you need to write to something that isn't in user space, the entire program might be better of run as root (under sudo of course), such as sudo ./myscript.py.

Upvotes: 1

Related Questions