Настройка правила .pkla для polkit

Вопрос или проблема

Я хотел бы запустить службу systemd с использованием DBus в одном из моих приложений, которое запускается от пользователя без прав администратора myuser. Для этого мне нужно настроить PolicyKit, где я использую polkit 0.105, и добавил следующий .pkla файл в /etc/polkit-1/localauthority/50-local.d

Identity=unix-user:myuser
Action=org.freedesktop.systemd1.manage-unit-files;org.freedesktop.systemd1.manage-units
ResultActive=yes
ResultInactive=yes

Однако это почему-то не помогло, так как я все еще получаю ошибку Permission denied от DBus, когда оно запускается от myuser, тогда как оно работает, когда запускается от root.

Насколько я понял, полкит на данный момент именно так и настраивается.

Что меня также удивляет, так это то, что при выполнении pkaction он просто ничего не возвращает.

Нужна ли polkit какая-то дополнительная настройка? Я только что установил его через apt-get на Ubuntu 19.04.

В org.freedesktop.systemd1.policy для :

action id="org.freedesktop.systemd1.manage-units"
action id="org.freedesktop.systemd1.manage-unit-files"

попробуйте заменить строку

<allow_active>auth_admin_keep</allow_active>

на :

<allow_active>yes</allow_active>

Ответ или решение

Для настройки правил PolicyKit (polkit) таким образом, чтобы пользователь "myuser" мог управлять юнитами systemd и файлами юнитов, вам необходимо выполнить несколько шагов и учесть несколько важных моментов. Рассмотрим детально, как это сделать.

Шаг 1: Создание .pkla файла

Вы уже создали файл .pkla в каталоге /etc/polkit-1/localauthority/50-local.d/. Однако давайте убедимся, что он имеет правильный формат и правильно настроен.

Создайте файл, назовём его, например, myuser.pkla, и добавьте в него следующий код:

[Управление сервисами systemd для myuser]
Identity=unix-user:myuser
Action=org.freedesktop.systemd1.manage-unit-files;org.freedesktop.systemd1.manage-units
ResultActive=yes
ResultInactive=yes

Шаг 2: Проверка правил

Политики в файловой системе обычно кэшируются, поэтому после изменения файлов .pkla может потребоваться перезагрузить службу или даже саму систему, чтобы ваши изменения вступили в силу. Убедитесь, что у вас есть следующие пакеты:

sudo apt-get install policykit-1 policykit-1-gnome

Шаг 3: Проверка статуса политик

Кроме того, вам необходимо будет убедиться, что ваши правила загружены. В этом поможет команда pkaction. Если она возвращает пустой вывод, возможно, ваши правила не были корректно распознаны.

Запустите:

pkaction | grep myuser

Если ничего не отображается, возможно, вам нужно освежить кэш или уточнить, корректно ли ваш файл .pkla привязан к необходимой политике.

Шаг 4: Проверка прав

Для получения информации об политиках, связанных с org.freedesktop.systemd1.manage-units и org.freedesktop.systemd1.manage-unit-files, можно использовать:

pkaction | grep org.freedesktop.systemd1

Если эти действия существуют, вам нужно проверить, кто имеет доступ к ним и на каких условиях.

Шаг 5: Редактирование файлов политики systemd

Как вы заметили, редактирование org.freedesktop.systemd1.policy может быть необходимым шагом, если встроенные права не соответствуют задаче. В том случае, если вы решите редактировать этот файл, вам следует:

  1. Открыть файл /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy.
  2. Найти строки с action id="org.freedesktop.systemd1.manage-units" и action id="org.freedesktop.systemd1.manage-unit-files".
  3. Изменить строки:
<allow_active>auth_admin_keep</allow_active>

на

<allow_active>yes</allow_active>

После внесения всех изменений проверьте, осталась ли система в рабочем состоянии и повторите тесты.

Заключение

Если все указанные шаги были выполнены, а ошибка "Permission denied" сохраняется, стоит ещё раз проверить конфигурации D-Bus и убедиться, что служба systemd запущена и доступна для взаимодействия. Иногда может понадобиться удалить и восстановить кэш polkit:

sudo pkill polkitd

Затем перезапустите D-Bus и протестируйте ваши настройки. Если проблема сохраняется, вам может понадобиться исследовать системные журналы для более детальной диагностики.

Следуя этим шагам, вы сможете настроить polkit для управления сервисами systemd от имени пользователя "myuser".

Оцените материал
Добавить комментарий

Капча загружается...