我希望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,但这并不能真正帮助一个组。
注意:我计划使用来自libsystem-dev和座舱的systemctl API,因此将D21添加到/etc/sudoers不会有帮助。
我不太关心systemctl enable,如果我需要更高的特权,那也没关系。
发布于 2019-12-17 07:19:16
这是我最终想出的解决方案。我创造了:
/etc/polkit-1/localauthority/50-local.d/service-auth.pkla
---
[Allow foogroup to start/stop/restart services]
Identity=unix-group:foogroup
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes注意,这特别适用于Debian/Ubuntu中使用的polkit <106。其他发行版使用较新版本的polkit,该版本将执行如下操作:
/etc/polkit-1/rules.d/foogroup.rules
---
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
subject.isInGroup("foogroup")) {
return polkit.Result.YES;
} });如果希望将其限制为单个服务,并且仅启动/停止/重新启动,请使用如下所示:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
subject.isInGroup("foogroup")) {
if (action.lookup("unit") == "foo.service") {
var verb = action.lookup("verb");
if (verb == "start" || verb == "stop" || verb == "restart") {
return polkit.Result.YES;
}
}
}
});发布于 2019-11-26 09:43:00
我在寻找一个解决方案,但没有找到一个真正满足我。一个令人满意的解决方案是在systemd中获得组支持。但我找到了解决办法。让我们假设要授予访问权限的用户是ann、ben和chris。他们都应该是一组awesomeproject。
awesomeproject并将用户添加到awesomeproject组中。sudo adduser awesomeproject
sudo usermod -a -G awesomeproject ann
sudo usermod -a -G awesomeproject ben
sudo usermod -a -G awesomeproject chrissystemctl的sudoers中。sudo visudo条目必须如下所示:
ann ALL=(awesomeproject) NOPASSWD: /bin/systemctl
ben ALL=(awesomeproject) NOPASSWD: /bin/systemctl
chris ALL=(awesomeproject) NOPASSWD: /bin/systemctl与其根据发行版的不同将它们放在/etc/sudoers中,不如将它们放在/etc/sudoers.d/awesomeproject中,而不是使用sudo visudo -f /etc/sudoers.d/awesomeproject。
awesomeproject的成员能够访问~awesomeproject中的相应文件和目录。ann、ben和chris:sudo awesomeproject systemctl ...https://unix.stackexchange.com/questions/504806
复制相似问题