Я хочу пользователей в группе foogroup
быть способным:
systemctl start foo.service
,systemctl stop foo.service
,systemctl status foo.service
, иjournalctl -u foo.service
без использования повышенных привилегий. Это возможно?
У меня есть служба systemd, которая выглядит так:
[Unit]
Description=foo service
[Service]
Type=simple
ExecStart=/bin/sleep infinity
User=foobot
Group=foogroup
куда foobot
является системным пользователем.
Я знаю, что мы можем установить файл модуля в ~/.config/systemd/user/
чтобы позволить непривилегированному пользователю использовать systemd, но это не особо помогает группе.
Примечание: я планирую использовать кабина так что добавление systemctl
к /etc/sudoers
не поможет.
В /etc/polkit-1/rules.d/10-myservice.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" && subject.isInGroup("somegroup")) {
if (action.lookup("unit") == "foo.service") {
var verb = action.lookup("verb");
if (verb == "start" || verb == "stop" || verb == "restart") {
return polkit.Result.YES;
}
}
}
});
Я бы принял ответ Толлефа Фог Хина, если бы я не был в дистрибутиве Debian, однако, поскольку debian использует polkit (<0.106), * .rules недоступны. Эквивалентный файл в Debian:
/etc/polkit-1/localauthority/50-local.d/manage-units.pkla
----
[Allow users to manage services]
Identity=unix-group:somegroup
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes
Однако учтите, что это не совсем эквивалент. Он позволяет группе управлять службами, но не указывает, какими службами группе разрешено управлять. Кроме того, он не ограничивает допустимые «глаголы». Однако я заметил, что пока systemd start
разрешено, такие вещи, как systemd enable
все еще недоступны, что защищено правами доступа к файлам.
У меня есть еще один открытый вопрос по SO относительно различий между возможностями *.rules
и *.pkla
файлы этого ответа Вот.