Корневые задачи с помощью dbus и policykit

В какой-то момент мое приложение должно сделать задачи администрирования как создание файла в / и т.д. или выполнении команд с корневыми полномочиями.

Я знаю, просто мог сделать Q&D:

os.popen("pkexec foo bar")

Но я также знаю, что это не предсказанный очевидный способ, чтобы сделать это. Некоторое раздражение для пользователя, потому что он всегда должен повторно входить в свой пароль вместо того, чтобы иметь подобную сессии обработку.

Я был очень оптимистичен, когда я нашел пример Python для аутентификации.

Это - простой пример, который работает immediatly:

import dbus

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 id

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

print result

Я был довольно наивными взглядами, что после авторизации я мог просто продолжить в сценарии некоторый os.popen () - команды. Теперь я знаю лучше :(

Я вижу результат кортежа в примере выше, но в дальнейшей документации я не мог найти, что рабочий код продолжился в этой точке.

Что я имею отношение к этому результату? Как я могу продолжить выполнять задачи, в которых я нуждаюсь? Существует ли ссылка Python с примерами, которые предлагают доступные методы?

Я пытался перечислить методы авторизации при помощи dir (), но не мог найти подсказку, как продолжить.

Я действительно хочу избегать использования своей нейтрализации, но это было бы мое последнее средство. Помогите мне делающий его правильный путь :)

Спасибо и всего наилучшего

André

Править:

Должный я не принес это для работы, и мое прежнее решение путем запуска моей программы с gksu не работает из/, выбирают/, я наконец должен был сдаться и реализовать тысячу, просит пароль делать программу элементарной работой для получения, по крайней мере, Футболки в откровенном обмене мнениями приложения.

Я не заметил проблемы, потому что я сначала сделал быстро доля. Там все работало правильно. Просьба однажды о пароле вначале. Я полностью снижаюсь теперь. Мой вклад для AppShowdown был https://launchpad.net/armorforge.; - (

10
задан 9 August 2012 в 18:48

1 ответ

Существует фундаментальная концепция, которую нужно понять в первую очередь: PolicyKit обрабатывает только авторизацию, а не повышение привилегий. PolicyKit ответит на вопрос: «авторизован ли пользователь для выполнения этой задачи?», Но он не даст вам привилегий root.

Обычно используемая модель заключается в создании системной службы DBus, которая работает с привилегиями root. Он будет принимать запросы от некорневых процессов, использовать PolicyKit, чтобы определить, авторизован ли этот процесс для выполнения этого запроса, а затем выполнить запрошенную задачу.

Я написал учебник по PolicyKit и DBus с Python на ubuntuforums.org несколько лет назад. Принципы одинаковы, хотя может потребоваться обновление. Мне нужно сейчас лечь спать, так что взгляните и дайте мне знать, если это нужно обновить.

0
ответ дан 9 August 2012 в 18:48

Другие вопросы по тегам:

Похожие вопросы: