Назад | Перейти на главную страницу

Разрешить пользователю без полномочий root запускать определенные службы systemd (не *) без пароля с помощью правила polkit

У меня есть пользователь без полномочий root, который должен иметь возможность запускать / останавливать / перезапускать подмножество служб в моей системе без запроса пароля авторизации. В идеале я бы хотел, чтобы это было сделано через polkit, но при необходимости я выберу sudo. В любом случае, я видел здесь решения, которые включают добавление файла в localauthority и добавление файла .rules в /etc/polkit-1/rules.d который указывает службы, которые необходимо запустить. Я должен упомянуть, что это в системе CentOS7.

Однако решение местных властей было для все services и решение для файла .rules (взято отсюда: systemd: предоставить непривилегированному пользователю разрешение на изменение одной конкретной службы.) по-прежнему будет запрашивать пароль, поскольку для действия "manage-units" установлено значение "auth_admin" в /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy.

Есть ли способ, чтобы polkit позволял определенному пользователю запускать определенные службы без пароля? Без необходимости давать этому пользователю широко открытые привилегии для действия manage-units? Я в основном хочу условные привилегии управляющих единиц.

Также я заметил кое-что интересное: если я запустил эту функцию

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" && subject.user == "alice")
    {
        return polkit.Result.YES;
    }
});

Работает, правда, для всех сервисов. Но если я попытаюсь развернуть сервисы, изменив его на это:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "example.service" &&
        subject.user == "alice") {
        return polkit.Result.YES;
    }
});

Вдруг запрашивает пароль. Не уверен, почему он также не запрашивает пароль для первой функции, поскольку он все еще действует в соответствии с действием manage-units.