Разрешить некорневому пользователю запускать определенные службы systemd (не *) без пароля с помощью правила polkit
У меня есть пользователь без полномочий root, и мне нужно иметь возможность запускать / останавливать / перезапускать набор служб в моей системе без запроса пароля авторизации. В идеале я хотел бы, чтобы это было сделано с помощью polkit, но при необходимости выберу sudo. Во всяком случае, я видел здесь решения, которые включают добавление файла в localauthority и добавление файла.rules в /etc/polkit-1/rules.d
который определяет сервис (ы), которые будут запущены. Я должен упомянуть, что это на системе CentOS7.
Тем не менее, решение localauthority было для всех сервисов, а решение для файла.rules (взято отсюда: systemd: предоставьте непривилегированному пользователю разрешение на изменение одной конкретной службы) по-прежнему запрашивает пароль, так как действие "manage-units" установить "auth_admin" в /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
,
Есть ли способ, чтобы polkit позволил определенному пользователю запускать определенные службы без пароля? Без необходимости предоставлять этому пользователю широкие открытые привилегии для действия управляющих единиц? Я в основном хочу условные привилегии управляющего модуля.
Также кое-что интересное я заметил: если я запускаю эту функцию
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;
}
});
Внезапно он запрашивает пароль. Не уверен, почему он не будет запрашивать пароль для первой функции, поскольку он все еще действует в соответствии с действием управляющих модулей.