如何为我的应用程序获得root权限?
问题描述:
我的应用需要做一些特权工作。我一直在寻找,但我找不到任何有用的东西。我知道我想使用Policykit1和dbus,因为我发现的所有其他选项都不再使用。如何为我的应用程序获得root权限?
这是我到目前为止的代码:
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')
我不能让目录,我究竟做错了什么?
答
文件系统安全性正在阻止您,因为您的用户没有对/usr/local/share/somefolder
的写入权限。您可以使用sudo
临时升级该目录创建权限。但是,如果您需要以超级用户身份执行更多操作,它并不会停留在那里。
如果你需要写入一些不在用户空间中的东西,整个程序可能会更好地以root身份运行(当然是sudo),比如sudo ./myscript.py
。
整个过程是通过使用dbus和policykit作为获取权限的手段来避免使用诸如“sudo ./myscript.py”之类的东西。到目前为止,这行代码:result = authority.CheckAuthorization(subject,action_id,details,flags,cancellation_id)能够请求身份验证,但即使我完全使用root密码,应用程序的权限也不会升高。 – zimio 2010-07-10 11:07:54
如果你想通过调用PolicyKit D-Bus方法来提高权限(这是不可能的),这与在'sudo'下运行没有区别,因为用户必须信任你的整个应用程序。 PolicyKit只允许调用特权系统服务的预配置方法。 – rkhayrov 2010-07-11 21:32:10
您是否考虑过使用'gksudo',并用一个简单的bash脚本打包您的应用程序来执行'gksudo myscript.py'?这当然是一个简单的解决方法。 – jathanism 2010-07-12 16:31:22