использование dbus и polkit для запуска службы Python с привилегиями root, которая вызывает скрипт root - PullRequest
0 голосов
/ 25 февраля 2019

Я написал скрипт на python, который загружает файлы deb из панели запуска, а затем обращается к скрипту оболочки, чтобы использовать Alien для конвертации debs в rpms.

Скрипт оболочки использует иностранца, и поэтому ему нужнодля запуска с правами root.

Программа использует пул потоков для асинхронной загрузки файлов deb, используя threadpool.apply_async, а затем использует пул обработки для асинхронного вызова сценария оболочки, поэтому все происходит достаточно быстро.

Все работает хорошо, но сценарий оболочки, который вызывает Alien, должен быть root, иначе пакеты не будут собраны правильно.Когда я вначале закончил сценарий, я использовал pkexec для вызова alien после использования sudo.В обоих случаях у меня возникла пара проблем.

Во-первых, при запуске с правами root я потерял среду пользователя и потерял установленные в Python библиотеки Python.Возможно, я мог бы использовать sudo -s или аналогичные, но вторая проблема заключалась в том, что мне приходилось вводить свой пароль root для каждого собранного пакета.

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

Я решил отфильтровать установочные части Python,которые включают в себя многопоточную загрузку и многопоточный вызов сценария оболочки, а затем попробуйте запустить эти части от имени пользователя root / superuser.

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

Мне удалось использовать polkit, чтобы показать диалоговое окно ввода пароля и авторизовать суперпользователя, но я не знаю, как использовать возвратзначение из polkit

`authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)`

, которое показывает диалог пароля для авторизации, но не обрабатывает повышение привилегий скриптов.

Я установил службу установки python как 0500 perms, так что, надеюсь,После того, как я выяснил, как повысить привилегии, пользователь root может читать и выполнять службу, которая в настоящее время создается на сеансовой шине.

Как повысить разрешения и одновременновремя, оставить переменные окружения пользователя, чтобы мне не нужно было устанавливать модули python в учетную запись root?

Большое спасибо за вашу помощь заранее ...

ps.Я написал файл действий polkit и правило polkit, но в каждом случае я не уверен, как идентификатор действия связан с повышением привилегий.имп.Могу ли я / я должен использовать PAM?

...