我希望foogroup组的用户能够:
systemctl start foo.service,systemctl stop foo.service,systemctl status foo.service,和journalctl -u foo.service而不使用提升的特权。这有可能吗?
我有一个系统服务,它看起来像:
[Unit]
Description=foo service
[Service]
Type=simple
ExecStart=/bin/sleep infinity
User=foobot
Group=foogroup其中foobot是系统用户。
我知道我们可以将单元文件安装到~/.config/systemd/user/以允许非特权用户使用systemd,但这并不能真正帮助一个组。
注意:我计划使用座舱,所以将systemctl添加到/etc/sudoers不会有帮助。
发布于 2019-04-06 16:45:12
如果我没有使用Debian发行版,我会接受Tollef的答案,但是由于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这样的东西仍然不可用,这是受文件权限保护的。
关于*.rules的功能与这个答案这里的*.pkla文件之间的差异,我还有另一个悬而未决的问题。
发布于 2019-03-21 13:01:41
在/etc/polkit中-1/规则.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;
}
}
}
});https://serverfault.com/questions/957323
复制相似问题