Правила PolicyKit никогда не вступают в силу.

Вопрос или проблема

Я пытаюсь написать новый файл .rules для PolicyKit. Моя пробная попытка (в директории /etc/polkit-1/rules.d/) выглядит так:

polkit.addRule(function(action, subject) {
    polkit.spawn(["rm","/home/gabriel/test"]);
    if (action.id == "org.freedesktop.policykit.exec") {
        polkit.log("action=" + action);
        polkit.log("subject=" + subject);
    }
    return polkit.Result.NOT_HANDLED;
});

Но, насколько я могу судить, этот код никогда не выполняется. Файл test по-прежнему на месте, и нет выводов логов после выполнения чего-либо вроде $ pkexec -u otheruser bash.

(Я пытался установить для файлов .rules разрешение на исполнение.)

Если вы используете Ubuntu 22.04 (или ниже), то вы все еще используете старую версию PolKit, где нет файлов .rules, а только файлы .pkla и .conf.

В командной строке выполните:

pkaction --version

Если версия < 0.106, то вы можете использовать только старый синтаксис.

Вы можете создать файл .pkla в /etc/polkit-1/localauthority/, смотрите man pklocalauthority для инструкций и примеров.

Чтобы все работало как ожидается, нужно поместить свои собственные файлы .rules в:

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

Обратите внимание, что это также должно решить вопрос.

Следующее сработало для меня (ubuntu 22.04 с версией pkaction 0.105):

Отредактируйте следующий файл:

/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

И измените первый раздел следующим образом:

[Монтаж, проверка и т. д. внутренних дисков]
Identity=unix-group:admin;unix-group:sudo
Action=org.freedesktop.udisks.filesystem-*;org.freedesktop.udisks.drive-ata-smart*;org.freedesktop.udisks2.encrypted-unlock-system;org.freedesktop.udisks2.filesystem-fstab;org.freedesktop.udisks2.filesystem-mount-system;org.freedesktop.udisks2.filesystem-mount-other-seat;
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Перезагрузка не требуется. Работает сразу после редактирования файла.

Обратите внимание, что я добавил “org.freedesktop.udisks2.filesystem-mount-other-seat” здесь. В моем случае, когда я пытался смонтировать диск из командной строки, я получал следующее сообщение:

$ udisksctl mount -b /dev/sdb1
==== АВТЕНТИФИКАЦИЯ ДЛЯ org.freedesktop.udisks2.filesystem-mount-other-seat ===
Требуется аутентификация для монтирования WD Elements 25A3 (/dev/sdb1)
Аутентификация как: Пользователь,,, (user)

Личный опыт: НЕ помещайте свои собственные правила в /usr/share/polkit-1/rules.d, если вы не понимаете, что именно вы добавили в свои скрипты правил.

Любые пользовательские правила в этой папке могут повлиять на поведение системы, например: XRDP.

Поместите свои собственные правила в /etc/polkit-1/rules.d/

Ответ или решение

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

  1. Проверка версии PolicyKit: Убедитесь, что вы используете подходящую версию PolicyKit для .rules файлов. Выполните команду:

    pkaction --version

    Если версия меньше 0.106, это означает, что вы используете старую версию PolicyKit, которая поддерживает только файлы .pkla и .conf.

  2. Корректное расположение .rules файлов: Убедитесь, что ваш файл правил находится в правильной директории. Для пользовательских правил используйте:

    /etc/polkit-1/rules.d/

    Если вы хотите, чтобы правила применялись глобально, можно использовать:

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

    Однако, если вы не уверены в написанных вами правилах, рекомендуется размещать их в /etc/polkit-1/rules.d/.

  3. Правильный синтаксис скрипта: Пересмотрите ваш скрипт на предмет ошибок. Например, ваша логика должна быть в соответствии с тем, что вы хотите протестировать. В вашем коде вызывается polkit.spawn() для удаления файла, что может не сработать так, как вы ожидаете. Убедитесь, что ваша цель в скрипте логически сформулирована.

  4. Логирование: Чтобы проверить, происходит ли вызов вашего кода, добавьте дополнительные записи в журнал (например, с помощью polkit.log()), и убедитесь, что у вас есть соответствующие права доступа для их записи. Процесс может не выводить информацию в журнал, если правила не вызываются.

  5. Разрешения на запуск: Убедитесь, что ваш файл .rules имеет корректные права доступа. Если вы тестируете файл, не забудьте дать ему разрешение на выполнение:

    sudo chmod +x /etc/polkit-1/rules.d/your_rule.rules
  6. Перезагрузка не требуется: Для обновления правил PolicyKit не требуется перезагружать систему. Изменения должны вступить в силу сразу после сохранения файла. Однако вы можете попробовать перезапустить службу polkit или перезагрузить вашу сессию.

  7. Использование .pkla файлов: Если вы работаете с версией PolicyKit < 0.106, вам необходимо использовать .pkla файлы для конфигурации прав доступа. Создайте файл в /etc/polkit-1/localauthority/ и настройте его соответственно.

  8. Тестирование правил: Попробуйте протестировать ваши правила с конкретными действиями, которые они должны обрабатывать. Это поможет вам более точно определить, куда может уводить ошибка.

Если все вышеперечисленное выполнено и ваш файл правил все еще не работает, возможно, имеет смысл просмотреть системные журналы (например, с помощью journalctl) для получения дополнительной информации о возможных ошибках или предупреждениях, связанных с PolicyKit.

Оцените материал
Добавить комментарий

Капча загружается...