У меня есть пользователь без полномочий 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.