...
Поставщик операционной системы и системный администратор могут изменить поведение системы авторизации с помощью правил авторизации.
Официальная документация расположена на странице "polkit Reference Manual".
| Примечание |
|---|
Система авторизации polkit не влияет на работу других способов увеличения прав пользователя. Например, у пользователя есть право запуска какой-то программы с помощью команды |
...
. |
В набор программ polkit входят:
| Программа | Описание |
|---|---|
| polkitd | Менеджер авторизации. Системная служба |
| pkcheck | Программа для проверки наличия у процесса права на выполнение определённого действия |
| pkaction | Программа для отображения информации о действии |
| pkexec | Программа для запуска команды от имени другого пользователя |
| pkttyagent | Текстовой Текстовый агент аутентификации |
Алгоритм работы системы авторизации polkit:
...
Агент аутентификации автоматически запускается при старте пользовательского сеанса.
Графический сеанс пользователя
Когда требуется аутентифицировать пользователя, открывается окно агента. В окне окне отображается информация для чего требуется ввести пароль, а также поле для ввода пароля пользователя.
Внешний вид агента зависит от рабочего стола пользователя. Так, в Astra Linux SE для рабочего стола Fly используется агент /usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1.
Рисунок 2. Окно агента аутентификации polkitаутентификации polkit-kde-authentication-agent-1
Если требуется ввести пароль пользователя, который не является текущим пользователем сеанса, то в окне также отображается пользователь, пароль которого требуется ввести.
Рисунок 3. Окно агента аутентификации polkit-kde-authentication-agent-1. Отображается пользователь, пароль которого требуется ввести.
При нажатии на кнопку "Подробности >>" отображается дополнительная информация о запрошенном действии.
Рисунок 4. Окно агента аутентификации polkit-kde-authentication-agent-1. Подробности
Описание действий, выполняемых программой
Вместе с привилегированной программой, поддерживающей polkit, устанавливается XML-файл "<адрес_получателя_на_D-BUS_шине>.policy". Где <адрес_получателя_на_D-BUS_шине> – это адрес получателя (путь объекта), под которым привилегированная программа регистрируется на системной шине D-BUS. Файл устанавливается в каталоге /usr/share/polkit-1/actions/.
В policy-файле хранятся описания действий, которые может выполнить привилегированная программа. Название действия формируется как "<адрес_получателя_на_D-BUS_шине>.<действие>".
...
Консольный сеанс пользователя
В консольном сеансе для аутентификации пользователя используется текстовый агент /usr/lib/polkit-1/polkit-agent-helper-1, входящий в пакет polkitd.
Текстовый агент выводит информацию о запрошенном действии, а также имя пользователя, чей пароль требуется ввести. Ниже отображается приглашение для ввода пароля.
Например, после ввода команды "hostnamectl hostname astra3" отобразится запрос на ввод пароля пользователя administrator:
| Блок кода |
|---|
==== AUTHENTICATING FOR org.freedesktop.hostname1.set-hostname |
...
====
Чтобы настроить имя компьютера, необходимо пройти аутентификацию.
Authenticating as: administrator
Password: |
Описание действий, выполняемых программой
| Информация |
|---|
Название |
| Предупреждение |
|---|
Для изменения поведения системы авторизации polkit следует использовать правила авторизации. Изменения, сделанные в |
Для поиска policy-файлов, связанных программой можно использовать команду "dpkg -L <название_пакета>":
| Command |
|---|
dpkg -L systemd | grep policy |
Команда отобразит policy-файлы, установленные для программ, входящих в пакет systemd:
...
Вместе с привилегированной программой, поддерживающей polkit, устанавливается XML-файл "<адрес_получателя_на_D-BUS_шине>.policy". Где <адрес_получателя_на_D-BUS_шине> – это адрес получателя (путь объекта), под которым привилегированная программа регистрируется на системной шине D-BUS. Файл устанавливается в каталоге
/usr/share/polkit-1/actions/.
В policy-файле хранятся описания действий, которые может выполнить привилегированная программа. Название действия формируется как "<адрес_получателя_на_D-BUS_шине>.<действие>".
Пример названия файла: "org.freedesktop.hostname1.policy
...
".
Пример названия действия: "org.freedesktop.hostname1.set-hostname".
| Информация |
|---|
Название |
| Предупреждение |
|---|
Для изменения поведения системы авторизации polkit следует использовать правила авторизации. Изменения, сделанные в |
Для поиска policy-файлов, связанных программой можно использовать команду "dpkg -L <название_пакета>":
| Command |
|---|
dpkg -L systemd | grep policy |
Команда отобразит policy-файлы, установленные для программ, входящих в пакет systemd:
| Блок кода |
|---|
locale1.policy /usr/share/polkit-1/actions/org.freedesktop.login1.policy /usr/share/polkit-1/actions/org.freedesktop.network1.policy /usr/share/polkit-1/actions/org.freedesktop.systemd1hostname1.policy /usr/share/polkit-1/actions/org.freedesktop.timedate1locale1.policy /usr/share/polkit-1/actions/org.freedesktop.timesync1.policylogin1.policy /usr/share/polkit-1/actions/org.freedesktop.network1.policy /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy /usr/share/polkit-1/actions/org.freedesktop.timedate1.policy /usr/share/polkit-1/actions/org.freedesktop.timesync1.policy |
Для поиска программы, с которой связан policy-файл, Для поиска программы, с которой связан policy-файл, можно использовать команду "dpkg -S <путь_к_policy-файлу>":
...
| Блок кода |
|---|
systemd: /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy |
Пример Пример описания действия, соответствующего команде "hostnamectl hostname <имя_узла>", и находящегося в файле org.freedesktop.hostname1.policy:
...
Правила авторизации используются для изменения поведения системы авторизации, заданного действиями в policy-файлах.
Правила хранятся в файлах с расширением .rules. Файлы могут располагаться в каталогах /etc/polkit-1/rules.d/ и /usr/share/polkit-1/rules.d/.
При старте polkitd считывает в память правила из rules-файлов. Файлы читаются в порядке следования их названий, отсортированных по алфавиту (вначале идут цифры, потом буквы). Если в каталогах присутствуют файлы с одним и тем же названием, то файл из каталога /etc/polkit-1/rules.d/ читается первым. Внутри Внутри файла правила читаются в том порядке, как они расположены в файле.
Для примера, следующие четыре файла будут прочитаны в порядке:
...
Правила распределяются по двум очередям.
В одну очередь попадают правила, добавленные с помощью метода polkit.addRule (см. описание ниже). Polkitd, получив запрос на проверку права пользователя выполнить действие, начинает выполнять правила в порядке их расположения в очереди. Выполнение правил останавливается на первом же правиле, которое вернёт какое-либо значение. Если ни одно правило не вернуло значение, то дальнейшее поведение Polkitd определяется действиями, описанными в policy-файлах.
В другую очередь попадают правила, добавленные с помощью метода polkit.addAdminRule (см. описание ниже). Эти правила используются, когда требуется определить, какие учётные записи принадлежат администраторам операционной системы. Правила выполняются в порядке их расположения в очереди. Выполнение правил останавливается на первом же правиле, которое вернёт значение.
...
Значения атрибутов соответствуют значениям элементов allow_* из policy-файлов, содержащих описания действий.
Пример?
...
Если функция вернула null или ничего не вернула, то Polkitd приступит к выполнению следующего по порядку правила, добавленного методом polkit.addRule.
Пример правила, которое разрешает любому пользователю запускать команду "hostnamectl hostname <имя_узла>" без ввода пароля:
| Блок кода |
|---|
polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.hostname1. |
...
set-hostname") {
return polkit.Result.YES;
}
return polkit.Result.NOT_HANDLED;
}); |
Метод: polkit.addAdminRule( function(action, subject) {...} );
Метод
...
Метод используется для указания, кто является администратором системы.
Метод добавляет функцию function(action, subject), которая вызывается, когда требуется аутентифицировать администратора системы.
Результатом функции является Функция должна возвращать массив, который может содержать строки:
...
Если функция вернула null, undefined, или или ничего не вернула совсем ничего, то то Polkitd приступит к выполнению следующего по порядку правила, добавленного методом polkit.addAdminRule.
...
Метод используется для запуска вспомогательной сторонней программы. Стандартный вывод этой программы будет возвращён как результат метода spawn. Программа запускается с правами пользователя polkitd.
Если при вызове сторонней программы произошла ошибка или программа завершилась не с кодом 0, то метод spawn прерывается с ошибкой исключения.
Если сторонняя программа не завершилась в течение 10 секунд, то она принудительно закрывается.
См. пример использования метода spawn.
МетодМетод: polkit.log( message );
Метод применяется для вывода дополнительной информации в системный журнал работы. Используется при отладке правил.
...
Внутрь функции function(action, subject) передаётся параметр action, который является объектом с информацией о действии, относительного которого проводится проверка.
Атрибут объекта:
| Атрибут | Тип | Описание |
|---|---|---|
action.id | string | Название проверяемого действия. Например, для программы |
Метод объекта:
| Метод | Возвращаемое значение |
|---|---|
| action.lookup( "<название_переменной>" ); | Значение переменной Если значение переменной Для примера, программа |
При использовании объекта объекта action без указания атрибута или метода, будут выведены одной строкой: название действия и переменные привилегированной программы.
...
| Метод | Возвращаемое значение |
|---|---|
subject.isInGroup( "<название_группы>" ); | Истина, если объект subject состоит в группе <название_группы> |
subject.isInNetGroup( "<название_сетевой_группы>" ); | Истина, если объект subject состоит в сетевой группе <название_сетевой_группы> |
При использовании объекта объекта subject без указания атрибута или метода, будут выведены одной строкой все атрибуты объекта.
...
| Примечание | ||||
|---|---|---|---|---|
В ОС Astra Linux, использующей мандатный контроль целостности, : после создания какого Для восстановления работы менеджера авторизации
|
Назначение администратора операционной системы
...
- Создать файл
/etc/polkit-1/rules.d/10-default.rulesс правилом:
гдеБлок кода polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.policykit.exec") { polkit.log("action=" + action); polkit.log("subject=" + subject); } });org.freedesktop.policykit.exec– название действия, соответствующего команде pkexec. - Разрешить службе
polkitdвыводить в системный журнал отладочные сообщения.
Для этого в файле systemd-юнита/usr/lib/systemd/system/polkit.serviceубрать из значения параметраExecStartопцию "--no-debug":Блок кода ExecStart=/usr/lib/polkit-1/polkitd --min-ilev-auth-admin=max
- Перечитать настройки системного менеджера
systemd, чтобы служба polkitd "подхватила" удаление опции "--no-debug":Command sudo systemctl daemon-reload
- Перезапустить службу
polkitd, чтобы она начала выводить отладочные сообщения в системный журнал:Command sudo systemctl restart polkit
...
Разрешение любому пользователю запускать определённую команду
Правило:
- относится только к любому пользователю;
- разрешает запускать команду "
hostnamectl hostname <имя_узла>" без ввода пароля:
...
- относится только к пользователям, состоящим в группе
group1; - разрешает запускать команду по изменению имени узла "
hostnamectl hostname <имя_узла>" без ввода пароля; - разрешает запускать программу GParted "
/usr/sbin/gparted" с вводом пароля администратора; - запрещает запускать все остальные команды:
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if ( ! subject.isInGroup("group1") ) {
return polkit.Result.NOT_HANDLED;
}
if (action.id == "org.freedesktop.hostname1.set-hostname") {
return polkit.Result.YES;
}
if (action.id == "org.gnome.gparted") {
return polkit.Result.AUTH_ADMIN;
}
return polkit.Result.NO;
}); |
Действие команды "hostnamectl hostname <имя_узла>" описано в файле /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy.
Действие программы GParted описано в файле /usr/share/polkit-1/actions/org.gnome.gparted.policy.
Якорь example_spawn example_spawn
Использование сторонней программы для определения права пользователя на выполнение действия
Правило:
- используется, когда пользователь вводит команду "
systemctl reboot" для перезапуска операционной системы; - запускает стороннюю программу "
/opt/company/bin/user-may-reboot" от имени пользователяpolkitd. В качестве аргумента программе передаётся имя пользователя, запросившего действие; - программа "
/opt/company/bin/user-may-reboot" каким-то образом решает, можно или нет пользователю перезапустить систему; - если сторонняя программа завершилась в течение 10 секунд с кодом 0, то действие, запрошенное пользователем, выполнится без запроса пароля;
- иначе у пользователя будет запрошен пароль администратора для выполнения действия.
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if (action.id.indexOf("org.freedesktop.login1.reboot") == 0) {
try {
// Программа user-may-reboot должна успешно завершаться с кодом 0 только в том случае,
// если пользователю разрешено перезагружать операционную систему.
polkit.spawn(["/opt/company/bin/user-may-reboot",
subject.user]);
return polkit.Result.YES;
|
| Блок кода |
polkit.addRule(function(action, subject) { if ( ! subject.isInGroup("group1") ) { } catch return polkit.Result.NOT_HANDLED; (error) { } if (action.id == "org.freedesktop.hostname1.set-hostname") { return polkit.Result.YES; // Если при выполнении программы возникла ошибка, то тогда у пользователя } if (action.id == "org.gnome.gparted") { // запрашивается пароль администратора return polkit.Result.AUTH_ADMIN; } return polkit.Result.NO; } }); |
...
Каталоги
| Каталог | Описание |
|---|---|
| /usr/share/polkit-1/actions/ | Каталог policy-файлов с описаниями действий программ |
/etc/polkit-1/rules.d/ | Каталоги rules-файлов с правилами авторизации, созданными поставщиком операционной системы или системным администратором |
| /etc/polkit-1/localauthority/ /var/lib/polkit-1/localauthority/ | Каталоги с правилами авторизации в устаревшем pkla-формате. Эти правила будут работать, если установлен пакет polkitd-pkla (устанавливается автоматически при установке ОС по умолчанию). В будущих версиях ОС возможен отказ от поддержки pkla-формата, из-за чего потребуется переписать правила в JavaScript-формате |
| /usr/share/doc/polkitd/examples/ | Каталог содержит примеры правил авторизации: 50-local-allow.rules и 50-local-deny.rules. Примеры описаны в статье. |
...


