pkla의 시스템 서비스 관리를 사용하는 것은 데비안의 polkit 규칙과 동일합니다.

pkla의 시스템 서비스 관리를 사용하는 것은 데비안의 polkit 규칙과 동일합니다.

사용자가 시스템 서비스를 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.1052012년부터 사용하고 있는 버전인 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에 대해서만 구현됩니다.

https://github.com/systemd/systemd/pull/1159

답변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 규칙을 따르지 않기 때문입니다.

관련 정보