Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8).
Введение
Polkit (ранее известный как PolicyKit) – система авторизации, которая решает: разрешить или запретить действие, запрошенное непривилегированным пользователем, но требующее повышенных привилегий.
При использовании polkit пользователь не наделяется повышенными привилегиями, что отличается, например, от программы sudo. Для принятия решения polkit может запросить у пользователя его пароль или пароль привилегированного пользователя.
Если при использовании команд su или sudo пользователь наделяется повышенными правами (например, правами пользователя root) для запуска привилегированной программы. То при использовании polkit пользователь НЕ наделяется повышенными правами, а запущенная пользователем привилегированная программа с помощью polkit определяет разрешено ли пользователю её использовать.
Система авторизации реализована в виде системной службы polkitd, запускаемой с минимальными правами. Для запроса пароля используется программа - агент аутентификации. Привилегированные программы для взаимодействия с системой авторизации используют динамическую библиотеку libpolkit-gobject-1.so.0.
Общение между polkitd и агентом аутентификации, привилегированными программами осуществляется с помощью системной шины D-Bus.
Официальная документация расположена на странице "polkit Reference Manual".
В набор программ polkit входят:
| Программа | Описание |
|---|---|
| polkitd | Системная служба polkitd |
| pkcheck | Программа для проверки того, что определённому процессу дано право выполнять определённое действие в операционной системе |
| pkaction | Программа для вывода информации о зарегистрированном действии |
| pkexec | Программа для выполнения команды от имени другого пользователя |
| pkttyagent | Текстовой агент аутентификации |
Алгоритм работы polkit:
- Непривилегированная программа пользователя обращается к привилегированной программе для выполнения какого-либо действия, требующего повышенных привилегий (прав администратора).
- Привилегированная программа обращается к системной службе polkitd, чтобы проверить право пользователя на выполнение действия.
- Системная служба polkitd исходя из хранящихся правил и действий:
- если требуется, то с помощью агента аутентификации запрашивает у пользователя его пароль или пароль привилегированного пользователя;
- определяет разрешено ли пользователю выполнять запрашиваемое действие. - Системная служба polkitd отвечает привилегированной программе: разрешено или запрещено выполнить запрошенное действие.
- Если от polkitd получено разрешение, то привилегированная программа выполняет запрошенное действие.
Рисунок 1. Схема работы системы авторизации polkit
Использование polkit привилегированными программами
Для использования polkit привилегированная программа должна иметь набор действий. Каждое действие соответствует операции, которую пользователь может запросить выполнить у привилегированной программы. Действия описываются в XML-файлах с расширением .policy, которые устанавливаются в каталог /usr/share/polkit-1/actions/.
Для привилегированной программы, использующей polkit, в каталоге /usr/share/polkit-1/actions/ храниться файл с расширением .policy. В файле описаны действия, выполняемые программой.
Пример файла org.freedesktop.hostname1.policy с описанием действия, соответствующего команде "host":namectl hostname <имя_узла>
<?xml version="1.0" encoding="UTF-8"?> <!--*-nxml-*-->
<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"https://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<!--
SPDX-License-Identifier: LGPL-2.1-or-later
...
-->
<policyconfig>
<vendor>The systemd Project</vendor>
<vendor_url>https://systemd.io</vendor_url>
<action id="org.freedesktop.hostname1.set-hostname">
<description gettext-domain="systemd">Set hostname</description>
<message gettext-domain="systemd">Authentication is required to set the local hostname.</message>
<defaults>
<allow_any>auth_admin_keep</allow_any>
<allow_inactive>auth_admin_keep</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
</defaults>
</action>
...
</policyconfig>
В файле *.policy отдельное действие описывается в блоке action. Название действия указывается в атрибуте id элемента action.
В элементе description дано описание действия. Возможна локализация описания.
В элементе message дано сообщение, которое отображается в окне агента аутентификации, когда у пользователя запрашивается пароль. Возможна локализация сообщения.
В блоке defaults описываются требования к авторизации пользователей:
- элемент allow_any – задаёт требования для любого пользователя. Необязательный элемент.
- элемент allow_inactive – задаёт требования для пользователей с неактивной сессией. Необязательный элемент.
- элемент allow_active – задаёт требования для пользователей с активной сессией. Необязательный элемент.
Каждый элемент allow_any, allow_inactive, allow_active может содержать одно из значений:
- no – пользователь не авторизован;
- yes – пользователь авторизован;
- auth_self – пользователь сессии, в которой запущен агент аутентификации, должен ввести свой пароль для прохождения авторизации;
- auth_admin – пользователь должен ввести пароль администратора для прохождения авторизации;
- auth_self_keep – аналогично auth_self, только успешная авторизация сохраняется на небольшой промежуток времени (e.g. five minutes);
- auth_admin_keep –аналогично auth_admin, только успешная авторизация сохраняется на небольшой промежуток времени (e.g. five minutes).
Для вывода названий всех установленных polkit-действий используется команда:
Вывод команды:
com.hp.hplip.installplugin com.redhat.tuned.active_profile com.redhat.tuned.auto_profile com.redhat.tuned.disable com.redhat.tuned.get_all_plugins com.redhat.tuned.get_instances ...
Для вывода детальной информации о действии используется команда:
Например, команда:
Вывод команды:
com.hp.hplip.installplugin: description: Install a plug-in into a HP printer message: System policy prevents installation of a printer plug-in vendor: HP Development Company vendor_url: http://hplip.net/ icon: implicit any: no implicit inactive: no implicit active: auth_admin
Поставщик специализированной операционной системы, системный администратор могут управлять системой авторизации с помощью правил авторизации. Правила хранятся в файлах с расширением .rules. Файлы могут располагаться в каталогах /etc/polkit-1/rules.d/ и /usr/share/polkit-1/rules.d/.
Файлы написаны на языке программирования JavaScript и взаимодействуют с polkitd через глобальный polkit-объект.
Агент аутентификации
Агент аутентификации автоматически запускается при старте графического сеанса пользователя.
Агент аутентификации предназначен для того, чтобы пользователь сеанса доказал, что он является реальным пользователем ...
При необходимости проверки пользователя система авторизации polkitd отправляет запрос агенту аутентификации. Открывается окно агента аутентификации с полем для ввода пароля. Дополнительно в окне отображается: для выполнения какого действия и от имени какого пользователя запрашивается пароль.
Внешний вид агента зависит от рабочего стола пользователя. Так, в Astra Linux SE для рабочего стола Fly используется агент polkit-kde-authentication-agent-1.
Рисунок 2. Внешний вид агента аутентификации polkit-kde-authentication-agent-1 для рабочего стола Fly
При нажатии на кнопку "Подробности >>" отображается дополнительная информация, полезная при тестировании работы polkit.
Рисунок 3. Внешний вид агента аутентификации polkit-kde-authentication-agent-1 для рабочего стола Fly. Подробности
Журналирование
Каталоги и конфигурационные файлы
| /usr/share/polkit-1/actions/ | |
| /usr/share/polkit-1/rules.d/ | |
| /etc/polkit-1/rules.d/ | |
| /etc/polkit-1/localauthority/ /var/lib/polkit-1/localauthority/ | Debian 13: For consistency with upstream and other distributions, the polkit ... as changed the syntax and location for local policy rules. You should now write local rules for customizing the security policy in JavaScript, and place them at /etc/polkit-1/rules.d/*.rules. Previously, rules could be written in pkla format, and placed in subdirectories of /etc/polkit-1/localauthority or /var/lib/polkit-1/localauthority. However, .pkla files should now be considered deprecated, and will only continue to work if the polkitd-pkla package is installed. ...so any local policy overrides will need to be migrated to the JavaScript format. |
| /usr/share/doc/polkitd/examples/ |


