10 февраля 2010 г.

PolicyKit

Данная статья является переводом 9-ой главы openSUSE Security Guide. Данное руководство можно скачать или просмотреть здесь. По сравнению с оригиналом статья немного сокращена (убрана настройка прав с помощью графических утилит).

PolicyKit является специальной инфраструктурой для приложений (application framework), выступающей в качестве посредника между непривилегированными пользователями и привилегированным системным контекстом (
т. е. теми операциями, которые требуют администраторских полномочий - прим. перев.). Всякий раз, когда процесс из пользовательской сессии пытается выполнить действия в системном контексте, опрашивается PolicyKit. В зависимости от конфигурации, указанной в так называемой политике, ответ может быть "yes"/"да", "no"/"нет" или "needs authentication"/требует аутентификации". В отличие от классических программ для повышения привилегий, таких как, например, sudo, PolicyKit не предоставляет администраторских полномочий на весь процесс, следуя принципу минимальных разрешений.



1. Доступные политики и поддерживаемые приложения
На данный момент не все приложения, требующие администраторских полномочий используют PolicyKit. Ниже приведены наиболее важные политики доступные на OpenSUSE ®.
CUPS
добавление, удаление, изменение параметров, запуск и остановка принтеров
управление заданиями на печать

NetworkManager
изменение параметров сетевых соединений

PolicyKit
Чтение и изменение привилегий для других пользователей
Изменение значений по умолчанию

Система
Wake On LAN
Подключение или отключение постоянных, временных и зашифрованных устройств
Включение или выключение WLAN
Включение или выключение Bluetooth
Управление доступом к устройствам
Остановка и перезапуск системы
Изменение параметров управления питанием

2. Типы авторизации
Каждый раз, когда процесс с поддержкой PolicyKit пытается выполнить привилегированные операции, опрашивается PolicyKit на предмет того имеет ли право данный процесс это делать. Ответ PolicyKit зависит от политики, определенной для этого процесса. Ответ может быть "yes"/"да", "no"/"нет" или "needs authentication"/требует аутентификации". По умолчанию, политика содержит описание неявных разрешений (implicit privileges), которые автоматически применяются ко всем пользователям. Кроме того, можно указать явные разрешения (explicit privileges), которые применяются к конкретным пользователям.
2.1 Неявные разрешения
Неявные разрешения могут определяться для любых, активных и неактивные сессий пользователей. Активная сессия - это та, в которой вы сейчас работаете. Она становится неактивной, например, когда вы переключаетесь на другую консоль. При установке неявных привилегий на "no", всем пользователям запрещается данная операция, опция "yes" разрешает ее всем пользователям. Однако, в большинстве случаев целесообразно устанавливать политику на "needs authentication".
Пользователь может либо авторизоваться как root или паролем своего пользовательского аккаунта. Оба метода аутентификации могут использоваться следующими способами: 

  • Authentication - пользователю необходимо каждый раз авторизоваться для выполнения данной операции.
  • One Shot Authentication - процесс аутентификации связывается с работающим в настоящий момент экземпляром программы. После ее перезапуска, пользователю необходимо будет авторизоваться снова.
  • Keep Session Authentication - диалоговое окно аутентификации содержит опцию "Remember authorization for this session"/"Запомнить авторизацию для данной сессии". Если пользователь отметит данную опцию, то его аутентификация будет действительна, пока он не выйдет из системы.
  • Keep Indefinitely Authentication - диалоговое окно аутентификации содержит опцию "Remember authorization"/"Запомнить авторизацию". Если данная опция отмечена, пользователь должен пройти аутентификацию только один раз.
2.2 Явные разрешения
Явные разрешения могут предоставляться для определенных пользователей, как без каких-либо ограничений, так и с ними, например, с ограничением только активной сессией и/или только локальной консолью.
Существует возможность не только предоставления прав конкретному пользователю, но и блокировки его доступа к данной операции. Заблокированные пользователи не смогут осуществлять действий, требующих администраторских прав, даже если политика неявных разрешений позволяет такие действия.

3. Настройка и изменение разрешений

Для изменения разрешений PolicyKit, вы можете использовать или графические средства настройки, которые доступны с GNOME (polkit-gnome-authorization) и KDE (polkit-kde-authorization), или утилиты командной строки, которые поставляются с PolicyKit, или редактировать файлы конфигурации. Хотя консольные или графические утилиты - хорошее решение для создания временных изменений, редактирование конфигурационных файлов является предпочтительным способом внесения постоянных изменений. 

3.1 Использование инструментов командной строки
PolicyKit поставляется с двумя инструментами командной строки для изменения неявных и присвоения явных разрешений. Каждая существующая политика имеет говорящее, уникальное имя, благодаря которому она может быть идентифицирована и которое используется данными инструментами. Список всех доступных политик можно посмотреть командой polkit-action.
polkit-action - служит для просмотра и изменения неявных разрешений. С помощью этой команды вы также можете сбросить все политики на их значения по умолчанию. При запуске без параметров, данная команда показывает список всех возможных политик. Для получения дополнительной информации см. man 1 polkit-action.
polkit-auth - данная утилита служит для проверки, выдачи, блокировки и отмены явных разрешений. Для просмотра списка явных разрешений для конкретного пользователя, необходимо использовать команду polkit-auth --explicit-detail --user <имя пользователя>. Если не указывать опцию -- user, то будут показаны политики для запустившего команду пользователя. Для дополнительной информации см. man 1 polkit-auth.

ВНИМАНИЕ!
Команда polkit-action с опцией --show-overrides покажет все политики, которые отличаются от значений по умолчанию. Опция --reset-defaults <действие> сбросит политику для данного действия на значение по умолчанию, являющееся значением по умолчанию для upstream. Для дальнейшей информации см. раздел 9.3.4

3.2 Изменение конфигурационных файлов
Настройка привилегий путем изменения конфигурационных файлов полезна, когда требуется развернуть и тот же набор политик на нескольких разных машинах, например, на компьютерах какого-то конкретного подразделения. Данным способом можно изменять, как явные, так и неявные разрешения.

Изменение конфигурационных файлов для неявных разрешений
OpenSUSE поставляется с двумя наборами разрешений по умолчанию, которые находятся в /etc/polkit-default-privs.standard и /etc/polkit-default-privs.restrictive. Первый файл определяет разрешения, хорошо подходящие для большинства настольных систем. Он является активным по умолчанию. Второй набор разрешений предназначен для компьютеров, администрируемых централизованным образом. Не изменяйте эти файлы. Выбор рабочего набора разрешений осуществляется путем установки переменной POLKIT_DEFAULT_PRIVS значения standart или restrictive в файле /etc/sysconfig/security с последующим запуском set_polkit_default_privs от пользователя root.
Для того чтобы определить ваш собственный набор разрешений, используйте файл /etc/polkit-default-privs.local. Разрешения заданные в нем будут иметь приоритет над определенными в других конфигурационных файлах. Чтобы задать разрешения, для каждой политики необходимо добавить строку вида:
<название привилегии> <любая сессия>: <неактивная сессия>: <активная сессия>
Для получения списка всех доступных разрешений, выполните команду polkit-action. Для параметров сессии возможно использовать следующие варианты:
yes - предоставить разрешения
no - заблокировать разрешения
auth_self - пользователь должен ввести свой пароль для аутентификации
auth_self_keep_session - пользователь должен ввести свой пароль для аутентификации один раз за сессию, разрешение предоставляется для всей сессии
auth_self_keep_always - пользователь должен ввести свой пароль для аутентификации один раз, разрешение предоставляется для текущей и будущих сессий
auth_admin - пользователь должен ввести пароль root при каждом запросе разрешения
auth_admin_keep_session - пользователь должен ввести пароль root, разрешение предоставляется для всей сессии
auth_admin_keep_always - пользователь должен ввести пароль root, разрешение предоставляется для текущей и будущих сессий
Для активации внесенных изменений запустите set_polkit_default_privs.

Изменение конфигурационных файлов для явных разрешений

Явные привилегии задаются в файле /etc/PolicyKit/PolicyKit.conf (в формате XML). Файл, который поставляется с OpenSUSE уже содержит необходимые заголовки и корневой элемент . Вносить изменения в данный файл необходимо внутри тегов .
Необходимые элементы данного файла:
match - указание аргумента action или user. Допускается только один аргумент. Для комбинации аргументов необходимо использовать несколько вложенных элементов match. В качестве значений аргументов можно использовать регулярные выражения POSIX. Аргумент user указывается следующим образом:
user = <имя пользователя>
При необходимости указания нескольких пользователей, их список разделяется символом
| .
Аргумент action имеет следующий синтаксис:
action = <политика>
Данным аргументом указываются уникальные идентификаторы политики. Чтобы получить список всех доступных политик - используйте команду polkit-action.

return = <значение> - указание ответа, возвращаемого PolicyKit . В качестве значения указываются варианты приведенные в предыдущем разделе (yes, no, auth_self и т.п.).
define_admin_auth - указание пользователей или групп, которым необходимо будет ввести их собственный пароль для совершения тех действий, которые требуют введения пароля root. В качестве аргумента можно указать или user=<имя пользователя> или group=<имя группы>. Указывать можно только один из приведенных аргументов. Несколько значений аргументов разделяются символом | , использование регулярных выражений не разрешается. Может применяться ко всем политика корневого уровня, либо к конкретной политике, указанной внутри выражения

П
ример файла /etc/PolicyKit/PolicyKit.conf :
"http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">


Первые три строки конфигурационного файла представляют собой заголовок XML. Их нельзя редактировать.
Между тегами заключен корневой (обязательный) элемент XML . Указание версии является обязательной, в настоящее время единственным допустимым значением 0.1.

Далее приведено выражение, предоставляющее пользователю tux разрешение выполнять обновление пакетов через PackageKit без необходимости вводить пароль.
Следующее выражение отнимает у пользователей tux и wilber возможность доступа ко всем политикам PolicyKit.

Последнее выражение (define_admin_auth) разрешает все членам группы administrators вводить свой собственный пароль для всех действий, требующих ввода пароля root. Поскольку данное выражение не содержит условия match, оно применяется ко всем политикам.
3.3 Сброс разрешений на значения по умолчанию
Каждое приложение с поддержкой PolicyKit поставляется с набором предустановленных неявных разрешений по умолчанию определенных разработчиками данных приложений (установки upstream по умолчанию). Причем, не обязательно, что именно такие политики будут активированы при установке openSUSE. OpenSUSE поставляется с собственным набором разрешений, которые перекрывают политики upstream.
Поскольку все инструменты для работы с PolicyKit (графические и текстовые) всегда работают с настройками upstream, вместе с OpenSUSE поставляется утилита set_polkit_default_privs, которая сбрасывает разрешения до определенных в файлах /etc/polkit-default-privs.*. Однако, данная команда polkit_default_privs сбрасывает только те политики, которые установлены в значения по для upstream. Чтобы сбросить все политики сначала на значения по умолчанию для upstream, а затем политики по умолчанию для openSUSE, выполните следующую команду:
rm -f /var/lib/PolicyKit-public/* && set_polkit_defaut_privs

ВНИМАНИЕ!
Для того чтобы политики сбросились именно на значения по умолчанию для OpenSUSE, убедитесь, что файл /etc/polkit-default-privs.local не содержит никаких значений, перекрывающих их. В противном случае будут применены политики из данного файла.

Оригинальная статья - Copyright © 2006- 2009 Novell, Inc.
Текст распространяется на условиях GNU Free Documentation License, Version 1.2 или более поздней версии

Комментариев нет:

Отправить комментарий