ユーザーがシステムサービスを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ルールに従わないからです。