...
| Программа | Описание |
|---|---|
| polkitd | Менеджер авторизации. Системная служба |
| pkcheck | Программа для проверки наличия у процесса права на выполнение определённого действия |
| pkaction | Программа для отображения информации о действии |
| pkexec | Программа для запуска команды от имени другого пользователя |
| pkttyagent | Текстовой Текстовый агент аутентификации |
Алгоритм работы системы авторизации polkit:
...
В консольном сеансе для аутентификации пользователя используется текстовой текстовый агент /usr/lib/polkit-1/polkit-agent-helper-1, входящий в пакет polkitd.
Текстовой Текстовый агент выводит информацию для чего требуется ввести пароль, пароль какого пользователя, а также о запрошенном действии, а также имя пользователя, чей пароль требуется ввести. Ниже отображается приглашение для ввода пароля.
...
Значения атрибутов соответствуют значениям элементов allow_* из policy-файлов, содержащих описания действий.
Если функция вернула вернула null или ничего не вернула, то Polkitd приступит к выполнению следующего по порядку правила, добавленного методом polkit.addRule.
...
| Блок кода |
|---|
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) передаётся параметр 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 <имя_узла>" без ввода пароля:
...
Якорь 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;
} catch (error) {
// Если при выполнении программы возникла ошибка, то тогда у пользователя
// запрашивается пароль администратора
return polkit.Result.AUTH_ADMIN;
}
}
}); |
...