사용자가 시스템 서비스를 somegroup
관리할 수 있도록 하려고 합니다 .someunit
에서는 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;
}
}
});
하지만 저는 polkit 0.105
2012년부터 사용하고 있는 버전인 Debianstretch/buster를 사용하고 있습니다. polkit(<0.106)
이러한 rules.d/*
파일은 지원되지 않습니다. 대신에 우리는 /etc/polkit-1/localauthority/50-local.d/*.pkla
.
여기 몇 가지 예가 있어요PK지방자치단체(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
그러나 이렇게 하면 모든 서비스의 모든 작업에 대한 액세스 권한이 부여됩니다. 특정 기능을 허용하는 것과 동일한 기능이 있습니까 action.lookup()
?
systemctl enable
시도 했지만 systemctl edit
여전히 실패했습니다(괜찮습니다). 따라서 action.lookup("verb")
아마도 필요하지는 않지만 action.lookup("unit")
여전히 매우 중요합니다.
이 주제에 관해 많은 공개 질문이 있습니다:
답변1
그것은 불가능합니다. 이 기능은 .rules-variant에 대해서만 구현됩니다.
답변2
하지만 사용자의 경우:
sudo cat /etc/polkit-1/localauthority/50-local.d/54-manage-units.pkla
[systemd]
Identity=unix-user:pi
Action=org.freedesktop.systemd1.manage-units
ResultAny=yes
ResultInactive=yes
ResultActive=yes
사실, 이것은 Raspian에서 작동하게 하는 유일한 방법입니다. 왜냐하면 어떤 이상한 이유로 인해 JavaScript로 작성된 polkit 규칙을 따르지 않기 때문입니다.