pkla のシステムサービス管理の使用は Debian の polkit ルールと同じです。

pkla のシステムサービス管理の使用は Debian の 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ルールに従わないからです。

関連情報