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

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

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

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

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

Введение

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

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

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

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

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

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


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


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

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

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

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


Алгоритм работы polkit:

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


Рисунок 1. Схема работы системы авторизации 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. Подробности

Polkit-действия

Вместе с программой, поддерживающей polkit-авторизацию, устанавливается файл с описанием действий, выполняемых программой.

Не следует вносить какие-либо изменения в файлы .policy. При обновлении программ изменения будут потеряны.

Для изменения поведения системы авторизации polkit необходимо использовать правила авторизации (см. соответствующий подраздел). 


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

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

Пример файла org.freedesktop.hostname1.policy с описанием действия, соответствующего команде "hostnamectl 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-действий используется команда:

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


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

Изначально поведение системы авторизации polkit определяется действиями, заданными в файлах *.policy. Поведение системы авторизации можно изменить с помощью правил авторизации. 

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


Правила написаны на языке программирования JavaScript. Для взаимодействия с polkitd используется глобальный объект polkit, который поддерживает методы:

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

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

Пример использования метода addAdminRule

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

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

Журналирование – Пример использования метода log

Прим. работает в Astra 1.8.3.7 Орёл, не работает в 1.8.3.7 Смоленск. - окт 16 11:27:46 astra-57029 polkitd[4481]: Insufficient integrity level of file '/etc/polkit-1/rules.d/10-default.rules'

Использовать только для отладки!


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

Для этого:

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

  2. Разрешить службе polkitd выводить в системный журнал отладочные сообщения (DEBUG).
    Для этого в файле 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. Вывести в терминале системный журнал:
    sudo journalctl -f
  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/

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



  • Нет меток