3.51111111111Rating 3.50 (4 Votes)

Polkit используется для управления привилегиями в дистрибутивах Linux. При помощи Polkit можно разрешить пользователю / процессу запускать приложения, которые для запуска требуют привилегированных полномочий. В разрезе некоторых административных задач, это очень полезная функция системы, которая позволяет достаточно гибко разрешать те или иные действия "простым" учетным записям.

Разрешить монтирование дисков в Linux, через Polkit

Например раньше, когда приходилось разрешать монтировать диск, добавлялась специальная запись в sudoers файл, что то типа такого:

username ALL = NOPASSWD: /bin/mount, /bin/umount

Наверняка многие с этим сталкивались, на сегодня для этих целей можно использовать Polkit, для этого можно создать группу, назовем ее diskusers:

groupadd diskusers

После в нее необходимо добавить пользователя(ей):

usermod -a -G diskusers userName

Далее создать разрешающее правило:

nano /etc/polkit-1/rules.d/allow-mount-partitions.rules

С текстом:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("diskusers")) {
       return polkit.Result.YES;
    }
});

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

Разрешить работать простым пользователям с Virtual Manager

Многие сталкивались с тем, что при запуске KVM Virt Manager постоянно просит рутовый пароль, по аналогии можно создать группу, например virtusers, создать Polkit правило:

nano /etc/polkit-1/rules.d/libvirt-vmmanager.rules

С текстом:

polkit.addRule(function(action, subject) {
  if (action.id == "org.libvirt.unix.manage" && subject.local && subject.active && subject.isInGroup("virtusers")) {
      return polkit.Result.YES;https://sys-adm.in/administrator/index.php?option=com_content&view=article&layout=edit&id=789#wf-editor-wysiwyg
  }
});

Кейс о том, как разрешить запуск Pritunl сервиса юзеру без привилегий

Сервис запускается после ввода OTP кода, для пользователя это окно выглядит так: 

allow pritunl with polkit

Из скрина видно, что процесс polkit, пытается выполнить действие com.pritunl.client.profile_start, при детальном рассмотрении правила /usr/share/polkit-1/actions/com.pritunl.client.policy можно увидеть, что запуск разрешается только в случае использования auth_admin_keep, что означает проверку подлинности пользователя с правами администратора:

...
<action id="com.pritunl.client.profile_start">
<description>Start pritunl connection</description>
...
<allow_any>auth_admin_keep</allow_any>
<allow_inactive>auth_admin_keep</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
...
</action>
...

Самым простым методом было-бы изменить auth_admin_keep на yes и все заработало без каких-либо проблем, но в таком случае этот процесс можно будет запускать всем, кому угодно, поэтому был выбран более правильный на мой взгляд путь:

  1. Создать группу, например vpnusers
  2. Добавить пользователя в группу
  3. Создать правило /usr/share/polkit-1/rules.d/pritunl-run.rules
  4. Указать в правиле действие и разрешение для группы:
polkit.addRule(function(action, subject) {
  if (action.id == "com.pritunl.client.profile_start" && subject.local && subject.active && subject.isInGroup("vpnusers")) {
      return polkit.Result.YES;
  }
});

Проверяем, радуемся :) 

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


Защитный код
Обновить

Сейчас один гость и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз