Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 120 Следующий »

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8).

Введение

Polkit (ранее известный как PolicyKit) – система авторизации, позволяющая непривилегированному пользователю выполнять действия, требующие повышенных прав (например, монтирование жёсткого диска, запуск программы от имени другого пользователя). При этом сам пользователь не наделяется повышенными правами, что отличается от использования команд sudo и su.

При получении запроса от пользователя привилегированная программа обращается к менеджеру авторизации – системной службе polkitd. Менеджер авторизации решает – можно ли выполнить действие, запрошенное пользователем. Если менеджер авторизации разрешил, то привилегированная программа выполняет действие, запрошенное пользователем.

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

Общение привилегированных программ и агента аутентификации с менеджером авторизации polkitd осуществляется с помощью системной шины D-Bus.

Описания действий, поддерживаемых привилегированной программой, входят в состав дистрибутива программы.

Поставщик операционной системы и системный администратор могут изменить поведение системы авторизации с помощью правил авторизации.


Официальная документация расположена на странице "polkit Reference Manual".


В набор программ polkit входят:

ПрограммаОписание
polkitdМенеджер авторизации. Системная служба
pkcheck

Программа для проверки наличия у процесса права на выполнение определённого действия  

pkactionПрограмма для отображения информации о действии
pkexecПрограмма для запуска команды от имени другого пользователя
pkttyagentТекстовой агент аутентификации


Алгоритм работы системы авторизации polkit:

  1. Программа (непривилегированная) пользователя обращается к привилегированной программе для выполнения какого-либо действия, требующего повышенных прав.
  2. Привилегированная программа обращается к системной службе polkitd, чтобы проверить право пользователя на выполнение запрошенного действия.
  3. Системная служба polkitd исходя из хранящихся описаний действий и правил авторизации:
    а. Если требуется, то обращается к агенту аутентификации, чтобы он аутентифицировал пользователя (через ввод пароля пользователя или администратора).
    б. Разрешает или запрещает привилегированной программе выполнить действие, запрошенное пользователем.
  4. Если от polkitd получено разрешение, то привилегированная программа выполняет действие, запрошенное программой пользователя.


Рисунок 1. Схема работы системы авторизации polkit

Агент аутентификации

Агент аутентификации автоматически запускается при старте пользовательского сеанса.

Когда требуется аутентифицировать пользователя, открывается окно агента. В окне отображается информация для чего требуется ввести пароль, а также поле для ввода пароля пользователя.

Внешний вид агента зависит от рабочего стола пользователя. Так, в Astra Linux SE для рабочего стола Fly используется агент /usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1.

Рисунок 2. Окно агента аутентификации polkit-kde-authentication-agent-1


Если требуется ввести пароль пользователя, который не является текущим пользователем сеанса, то в окне также отображается пользователь, пароль которого требуется ввести.

Рисунок 3. Окно агента аутентификации polkit-kde-authentication-agent-1. Отображается пользователь, пароль которого требуется ввести.


При нажатии на кнопку "Подробности >>" отображается дополнительная информация о запрошенном действии.

Рисунок 4. Окно агента аутентификации polkit-kde-authentication-agent-1. Подробности

Описание действий, выполняемых программой

Действия, которые может выполнить привилегированная программа, описываются в XML-файле с расширением .policy. Файл хранится в каталоге /usr/share/polkit-1/actions/.

Для изменения поведения системы авторизации polkit следует использовать правила авторизации.

Изменения, сделанные в policy-файлах, будут утеряны при обновлении программ.


Пример описания действия, соответствующего команде "hostnamectl hostname <имя_узла>", и находящегося в файле org.freedesktop.hostname1.policy:

<?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, только успешная авторизация сохраняется на короткий промежуток времени;
      - auth_admin_keep – аналогично auth_admin, только успешная авторизация сохраняется на короткий промежуток времени.

    Указанные значения требований можно изменить с помощью правил авторизации.


Для отображения названий всех установленных polkit-действий используется команда:

pkaction

Вывод команды:

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
...


Для вывода информации о действии используется команда:

pkaction -v -a <название_действия>

Пример команды:

pkaction -v -a com.hp.hplip.installplugin

Вывод команды:

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

Правила авторизации

Описание правил авторизации

Правила авторизации используются для изменения поведения системы авторизации, заданного действиями в policy-файлах.


Правила хранятся в файлах с расширением .rules. Файлы могут располагаться в каталогах /etc/polkit-1/rules.d/ и /usr/share/polkit-1/rules.d/.

Polkitd читает rules-файлы в порядке следования названий файлов, отсортированных по алфавиту (вначале идут цифры, потом буквы). Если в каталогах присутствуют файлы с одним и тем же названием, то файл из каталога /etc/polkit-1/rules.d/ читается первым.

Правила написаны на языке программирования JavaScript в виде методов глобального объекта polkit.

Поддерживаются методы:

  • addRule – для добавления правила авторизации;
  • addAdminRule – для указания, кто является администратором;
  • log – для вывода дополнительной информации в системный журнал работы. Используется при отладке правил.
  • spawn – для запуска вспомогательной сторонней программы. Стандартный вывод этой программы будет возвращён как результат метода spawn.

Polkitd выполняет правила в том порядке, как они идут в rules-файлах. Выполнение правил останавливается на первом же правиле, которое вернёт какое-нибудь значение. Если ни одно правило не вернуло значение, то дальнейшее поведение Polkitd определяется действиями, описанными в policy-файлах.


Более полная информация о правилах и их составлении дана на странице polkit или доступна по команде "man 8 polkit".

Назначение администратора операционной системы (пример использования метода addAdminRule)

В Astra Linux с помощью правила, содержащегося в файле /usr/share/polkit-1/rules.d/50-default.rules, пользователи группы astra-admin назначаются администраторами системы:

polkit.addAdminRule(function(action, subject) {
    return ["unix-group:astra-admin"];
});

Отладочное журналирование (пример использования метода log)

Журналирование следует использовать только на время отладки работы системы авторизации polkit.

Сделаем, например, чтобы при вызове команды pkexec в системный журнал выводилась дополнительная информация о действии и о пользователе, запустившем эту команду:

  1. Создать файл /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.

    В ОС Astra Linux, использующей мандатный контроль целостности, после создания какого-либо нового файла с правилом в каталогах /etc/polkit-1/rules.d/ и /usr/share/polkit-1/rules.d: polkitd перестаёт работать, а в системном журнале появляется запись:
    polkitd[5403]: Insufficient integrity level of file '/etc/polkit-1/rules.d/10-default.rules'

    Необходимо настроить мандатный контроль целостности для файла 10-default.rules либо, как временный вариант, разместить правило в уже существующем rules-файле.

  2. Разрешить службе polkitd выводить в системный журнал отладочные сообщения.
    Для этого в файле systemd-юнита /usr/lib/systemd/system/polkit.service убрать из значения параметра ExecStart опцию --no-debug:
    [Unit]
    Description=Authorization Manager
    Documentation=man:polkit(8)
    
    [Service]
    Type=dbus
    BusName=org.freedesktop.PolicyKit1
    ExecStart=/usr/lib/polkit-1/polkitd  --min-ilev-auth-admin=max
  3. Перечитать настройки системного менеджера systemd и перезапустить службу polkitd:

    sudo systemctl daemon-reload

    sudo systemctl restart polkit

  4. Запустить команду:
    pkexec -u administrator echo "test"
  5. В системном журнале появятся записи о действии "action=..." и о пользователе "subject=...":
    сен 22 12:51:44 astra-28739 polkitd[7867]: action=[Action id='org.freedesktop.policykit.exec' program='/usr/bin/echo' user.display='administrator' command_line='/usr/bin/echo test' user='administrator' polkit.message='Authentication is needed to run `$(program)' as user $(user.display)' polkit.gettext_domain='polkit-1' user.gecos='']
    сен 22 12:51:44 astra-28739 polkitd[7867]: subject=[Subject pid=4297 user='administrator' groups=administrator,tty,dialout,cdrom,floppy,audio,dip,video,plugdev,users,netdev,lpadmin,scanner,astra-admin,astra-console seat=null session='7' local=false active=true]

Каталоги

КаталогОписание
/usr/share/polkit-1/actions/
Каталог policy-файлов с описаниями действий программ

/etc/polkit-1/rules.d/
/usr/share/polkit-1/rules.d/

Каталоги rules-файлов с правилами авторизации, созданными поставщиком операционной системы или системным администратором
/etc/polkit-1/localauthority/
/var/lib/polkit-1/localauthority/

Каталоги с правилами авторизации в устаревшем pkla-формате. Эти правила будут работать, если установлен пакет polkitd-pkla (по умолчанию устанавливается при установке ОС).

В будущих версиях ОС возможен отказ от поддержки pkla-формата, из-за чего потребуется переписать правила в JavaScript-формате

/usr/share/doc/polkitd/examples/Каталог содержит примеры правил авторизации



  • Нет меток