2010-07-10 3 views
3

Мое приложение должно выполнять некоторые привилегированные работы. Я искал везде, но я не могу найти ничего полезного. Я знаю, что хочу использовать Policykit1 и dbus, потому что все остальные альтернативы, которые я нашел, больше не используются.Как получить корневые сообщения для моего приложения?

Это код, который я получил до сих пор:

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') 

Я не могу сделать каталог, что я делаю не так?

ответ

1

Защита файловой системы останавливает вас, потому что у вашего пользователя нет разрешений на запись в /usr/local/share/somefolder. Вы можете использовать sudo для временного увеличения разрешений для создания этого каталога. Но это не останавливается, если вам нужно выполнять больше операций как суперпользователь.

Если вам нужно написать что-то, что не находится в пространстве пользователя, вся программа может быть лучше запускаться как root (в соответствии с судом, конечно), например sudo ./myscript.py.

+1

Все дело в том, чтобы не использовать что-то вроде «sudo ./myscript.py», используя dbus и policykit как средство получения привилегий. Пока эта строка кода: result = authority.CheckAuthorization (subject, action_id, details, flags, cancelation_id) может запрашивать аутентификацию, но привилегии приложения не повышаются, даже когда я правильно добавляю свой пароль root. – zimio

+0

Если вы хотите повысить привилегии, вызывая методы PolicyKit D-Bus (что невозможно), это не имеет никакого значения при работе под 'sudo', потому что пользователь должен доверять всему вашему приложению. PolicyKit разрешает только вызов предварительно настроенных методов привилегированных системных служб. – rkhayrov

+0

Считаете ли вы использование «gksudo» и просто упаковку своего приложения с помощью простого сценария bash, который выполняет «gksudo myscript.py»? Это, безусловно, будет простым обходным путем. – jathanism