правило удаления USB для polkit

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

У меня возникли проблемы с написанием правила, которое позволяло бы всем (или некоторой подмножеству пользователей) получить доступ к yubikey (USB-устройству безопасности). Устройство отображается как /dev/hidraw2, и обычный пользователь находится в списке управления доступом (ACL), который предоставляет разрешение на его использование. Однако, если второй пользователь также вошел в систему, он не включен в ACL устройства. Система работает на openrc, а не на systemd, поэтому elogind контролирует ACL. (Elogind — это демон для openrc, который эмулирует некоторые функции systemd, которых нет в openrc изначально).

Когда я вручную добавляю вторичного пользователя в ACL для этого устройства с помощью setfacl, это работает. Но это не является постоянным решением, и когда устройство удаляется и вновь вставляется, setfacl нужно вызывать снова.

Насколько я могу судить, elogind использует polkit для определения, какой пользователь попадает в ACL. Но мне не удалось написать правило polkit, которое позволяло бы всем пользователям (или некоторому ограниченному подмножеству всех пользователей) использовать устройство. Вот пример правила, которое я пробовал:

    if ( subject.isInGroup("plugdev")) {
            return polkit.Result.YES;
        }
    }
});

Этот пример слишком щедрый, поскольку он должен позволять любому в plugdev получать доступ к любому устройству (я так думаю). Но даже это не позволяет вторичным пользователям получить доступ к устройству. Я изучил множество примеров правил polkit и немного запутался. Есть идеи?

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

Устранение проблемы доступа к USB-устройствам с помощью Polkit в системе, использующей OpenRC и elogind, может быть сложной задачей, особенно в контексте обеспечения безопасного доступа для определённой группы пользователей. В этой статье мы рассмотрим, как создать правило Polkit, которое позволит пользователям получать доступ к YubiKey и другим USB-устройствам, сохраняя при этом безопасность и контроль доступа.

Шаг 1: Понимание структуры прав доступа

Ещё до написания правил Polkit важно понять, как система управляет правами доступа к устройствам. Поскольку вы используете elogind, который эмулирует функциональность системы systemd, доступ к устройствам может управляться через ACL (Access Control List) и Polkit.

YubiKey, отображаемый как /dev/hidraw2, требует управления правами доступа на уровне устройства. Если у вас уже есть возможность добавлять пользователей в ACL с помощью setfacl, это показывает, что проблема заключается в автоматизации этого процесса при подключении устройства.

Шаг 2: Изучение правил Polkit

Правила Polkit пишутся в формате JavaScript и размещаются в каталоге, который зависит от вашей системы. Обычно это /etc/polkit-1/rules.d/ или /usr/share/polkit-1/rules.d/. Для начала создайте новое правило, назовите его, например, 99-yubikey.rules.

Шаг 3: Написание правила

Вот пример правила, которое позволяет пользователям, принадлежащим к группе plugdev, доступ к YubiKey, но при этом будет ограничено определённой логикой:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.UDisks2.filesystem-mount" && subject.isInGroup("plugdev")) {
        return polkit.Result.YES;
    }
    if (action.id == "org.freedesktop.login1.manage-sessions" && subject.isInGroup("users")) {
        return polkit.Result.YES;
    }
});

В этом примере правило проверяет, принадлежит ли пользователь к группе plugdev или users, прежде чем предоставить доступ к определённым действиям, связанным с устройствами. Убедитесь, что указанные ID действий соответствуют тем действиям, которые вам нужно разрешить.

Шаг 4: Тестирование и отладка

После создания правила выполните следующие шаги:

  1. Проверьте логи: Запустите систему и проверяйте логи через journalctl или другие инструменты мониторинга, чтобы видеть, срабатывают ли ваши правила.

  2. Попробуйте подключить YubiKey: Подключите устройство, и проверьте, может ли вторичный пользователь получить доступ.

  3. Регулируйте правила: Если необходимо, вносите изменения в правила в зависимости от полученных результатов тестирования и требований к безопасности.

Шаг 5: Постоянство прав доступа

Для обеспечения постоянства прав доступа рассмотрите возможность использования скрипта, который будет запускаться при подключении устройства и автоматически настраивать ACL. Это может быть сделано с помощью системы событий udev. Создайте файл, например, в /etc/udev/rules.d/99-yubikey.rules, который будет выглядеть так:

KERNEL=="hidraw2", MODE="0666"

Это правило предоставит доступ ко всем пользователям с правами на чтение и запись. Измените значение MODE для ограничения прав доступа только на чтение.

Заключение

Создание правил Polkit для управления доступом к USB-устройствам – это необходимый шаг для обеспечения безопасности и удобства использования в многопользовательской среде. Следуя указанным шагам, вы сможете обеспечить правильный доступ к вашем YubiKey, оптимизировав правила доступа для пользователей и соблюдая высокие стандарты безопасности. Не забудьте периодически пересматривать ваши правила и настройки ACL в зависимости от изменяющихся потребностей сети и пользователей.

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

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