Polkit: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 125: Строка 125:


2. [http://lampslave.ru/2-words-about-polkit/ Пара слов о polkit]
2. [http://lampslave.ru/2-words-about-polkit/ Пара слов о polkit]
3. [http://udisks.freedesktop.org/docs/latest/udisks-polkit-actions.html Отличие системных устройств от извлекаемых (англ.яз.)]


[[Категория:Admin]]
[[Категория:Admin]]
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}

Версия от 17:48, 11 января 2016

Polkit

Polkit (прежнее название: PolicyKit) — библиотека для UNIX-подобных операционных систем. API библиотеки используется для предоставления непривилегированным процессам возможности выполнения действий, требующих прав администратора. Использование Polkit противопоставляется использованию таких систем, как sudo, но не наделяет процесс пользователя правами администратора, а позволяет точно контролировать, что разрешено, а что запрещено.

Политики polkit

Все политики находятся в /usr/share/polkit-1/actions/ в формате *.policy Каждая политика представляет собой xml-файл, в котором описываются запросы к polkit. Каждый запрос имеет три условия, прописанных в секции defaults:

1. Запрос от любого пользователя. Тег <allow_any>

2. Запрос от неактивного пользователя. Тег <allow_inactive>

3. Запрос от активного пользователя <allow_active>

Внутри каждого тега прописывается возвращаемое значение. Используются следующие варианты значений:

  • 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, разрешение предоставляется для текущей и будущих сессий

Правила polkit

Менять напрямую политики нельзя, так как при обновлении системы они затрутся. Необходимо создавать собственные правила в /etc/polkit-1/rules.d/ в формате *.rules. Правила выполняются в порядке названия по алфавиту, поэтому вначале пишутся цифры, чтобы указать приоритет правила. Алгоритм создания правила (все действия выполняются от root):

1. Для начала определяем какую политику мы хотим изменить, для этого находим в /usr/share/polkit-1/actions/ требуемую.

2. Создаём новое правило:

touch /etc/polkit-1/rules.d/99-vashe_pravilo.rules

3. Открываем на редактирование созданный файл:

mcedit /etc/polkit-1/rules.d/99-vashe_pravilo.rules

4. Вставляем такой текст:

 polkit.addRule(function(action, subject) {
	if (action.id == "policy" && vashe_uslovie {
		return polkit.Result.YES;
	};
});

где

  • вместо policy пишем название политики, поведение которой нужно изменить
  • вместо vashe_uslovie: если нужно изменить поведение политики для одного пользователя пишем subject.user == '%username%', если для группы, то subject.isInGroup('%groupname%')
  • polkit.Result.YES означает, что политика будет при выполнении условия правила предоставлять разрешение.

Примеры

Пользователи часто жалуются на необходимость вводить пароль при монтировании разделов в файловом менеджере и создании нового подключения в NetworkManager. За эти разрешения отвечают соответственно org.freedesktop.udisks2.filesystem-mount-system и org.freedesktop.NetworkManager.settings.modify.system Сделаем так, чтобы если пользователь находится в системной группе xgrp, то для него запросы пароля не должны будут выполняться для этих действий. Для этого (все действия выполняются от root):

1. Создать два правила 99-udisk2_mount.rules и 99-networkmanager.rules

touch /etc/polkit-1/rules.d/99-udisk2_mount.rules /etc/polkit-1/rules.d/99-networkmanager.rules

2. Наполнить 99-udisk2_mount.rules таким содержанием:

polkit.addRule(function(action, subject) {
	if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("xgrp")) {
		return polkit.Result.YES;
	};
	if (action.id == "org.freedesktop.udisks2.filesystem-mount-other-seat" && subject.isInGroup("xgrp")) {
		return polkit.Result.YES;
	};
        if (action.id == "org.freedesktop.udisks2.eject-media-other-seat" && subject.isInGroup("xgrp")) {
        	return polkit.Result.YES;
        };
        if (action.id == "org.freedesktop.udisks2.power-off-drive-other-seat" && subject.isInGroup("xgrp")) {
        	return polkit.Result.YES;
        };
});

Правило power-off-drive-other-seat позволяет извлечь usb-флеш, а eject-media-other-seat извлечь лоток оптического привода.

3. Наполнить 99-networkmanager.rules таким содержанием:

polkit.addRule(function(action, subject) {
	if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" && subject.isInGroup("xgrp")) {
		return polkit.Result.YES;
	};
});

4. Создать системную группу xgrp (Если её ещё нет):

groupadd -r xgrp

5 Добавить пользователя в группу xgrp:

gpasswd -a имя_пользователя xgrp

6. Перелогиниться

Ссылки

1. Polkit. Статья в Википедии

2. Пара слов о polkit

3. Отличие системных устройств от извлекаемых (англ.яз.)