...
Поставщик операционной системы и системный администратор могут изменить поведение системы авторизации с помощью правил авторизации.
Официальная документация расположена на странице "polkit Reference Manual".
| Примечание |
|---|
Система авторизации polkit не влияет на работу других способов увеличения прав пользователя. Например, у пользователя есть право запуска какой-то программы с помощью команды |
Официальная документация расположена на странице "polkit Reference Manual".
В набор программ polkit входят:
| Программа | Описание |
|---|---|
| polkitd | Менеджер авторизации. Системная служба |
| pkcheck | Программа для проверки наличия у процесса права на выполнение определённого действия |
| pkaction | Программа для отображения информации о действии |
| pkexec | Программа для запуска команды от имени другого пользователя |
| pkttyagent | Текстовой Текстовый агент аутентификации |
Алгоритм работы системы авторизации polkit:
...
Консольный сеанс пользователя
Для В консольном сеансе для аутентификации пользователя в консольном сеансе используется текстовой текстовый агент /usr/lib/polkit-1/polkit-agent-helper-1, входящий в пакет polkitd.
Текстовой Текстовый агент выводит информацию для чего требуется ввести пароль, пароль какого пользователя, а также о запрошенном действии, а также имя пользователя, чей пароль требуется ввести. Ниже отображается приглашение для ввода пароля.
...
| Предупреждение |
|---|
Для изменения поведения системы авторизации polkit следует использовать правила авторизации. Изменения, сделанные в |
Для поиска поиска policy-файлов, связанных программой можно использовать команду "dpkg -L <название_пакета>":
...
Для поиска программы, с которой связан связан 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.
...
| Блок кода |
|---|
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;
}
}
}); |
...