Ste*_*art 6 debian polkit systemd
我试图允许用户somegroup
管理someunit
systemd 服务。
在 中polkit (>=0.106)
,这可以通过添加规则来完成:
/etc/polkit-1/rules.d/20-someunit.rules
---
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units"
&& subject.isInGroup("somegroup")
&& (action.lookup("unit") == "someunit.service") )
{
var verb = action.lookup("verb");
if (verb == "start" || verb == "stop" || verb == "restart") {
return polkit.Result.YES;
}
}
});
Run Code Online (Sandbox Code Playgroud)
polkit 0.105
然而,我使用的是 Debian Stretch/Buster,我们自 2012 年以来 一直使用该版本。polkit(<0.106)
不支持这些rules.d/*
文件。相反,我们依赖/etc/polkit-1/localauthority/50-local.d/*.pkla
.
按照pklocalauthority(8)中的一些示例,我可以在等效的 pkla 文件中完成大部分工作:
/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
Run Code Online (Sandbox Code Playgroud)
但是,这会授予对所有服务的所有操作的访问权限。是否有相当于允许特定action.lookup()
功能的功能?
我确实尝试了systemctl enable
和systemctl edit
,但仍然失败(这很好)。所以action.lookup("verb")
可能不是必需的,但action.lookup("unit")
仍然相当重要。
关于这个主题有很多悬而未决的问题: