web-dev-qa-db-ja.com

Debianでのpolkitのルールに相当するpklaを使用したsystemdサービス管理

somegroupのユーザーがsomeunitsystemdサービスを管理できるようにしようとしています。

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;
        }
    }
});
_

しかし、私は2012年から_polkit 0.105_を使用しているDebianストレッチ/バスターを使用しています。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
_

ただし、これにより、すべてのサービスに対するすべてのアクションへのアクセスが許可されます。特定のaction.lookup()機能を許可することに相当するものはありますか?

私は_systemctl enable_と_systemctl edit_を試しましたが、どちらもまだ失敗しました(それは良いことです)。したがって、action.lookup("verb")は必須ではないかもしれませんが、action.lookup("unit")は依然として非常に重要です。

このテーマについては、未回答の質問がたくさんあります。

2
Stewart

不可能です。この機能は、.rules-variantに対してのみ実装されました。

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

1
blaimi