systemdテンプレートファイルのPolkitルール - 方法

systemdテンプレートファイルのPolkitルール - 方法

特定のユーザーが特定のサービスを開始/停止/再開できるようにするためにpolkitを使用しようとしています。これらのサービスはsystemdテンプレートによって定義されているため、たとえば、ユーザーは次のコマンドを実行できます systmctl stop my-daemon@<parameter>.service。パラメータはカスタム英数字文字列です。このpolkitルールは完全に機能します。

polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
    action.lookup("unit") == "[email protected]" &&
    subject.user == "user1") {
    return polkit.Result.YES;
}

しかし、これは変化のない範囲、金持ち1そして他のパラメータと一緒には機能しません。

ルールを一般化するために正規表現を使ってみました。以下は、ルールの主な3行目の例です。

action.lookup("unit") == "my-daemon@*" &&
action.lookup("unit") == "my-daemon@[:alnum:]+" &&
action.lookup("unit") == "my-daemon@foo[0-9]" &&

上記のいずれも機能しません。私の考えでは、ポルケットはそうです。いいえここでは正規表現が許可されます。私が読んでsystemd テンプレート単位ファイルの Polkit ルールしかし、これは私にとって解決策ではありません。作成者は、ユニット名ではなくファイル名を直接テストしています。私は何が間違っていましたか?

これは前の質問につながります。ユーザーとしてsystemdシステムサービスを制御するしかし、以前のsystemdを使用する前に静的ルールを書くことはできませんでした。これでうまくいくはずですが、悲惨に失敗しています。

OS Suse 12.5
Polkit version 0.113
Systemd version 228

ベストアンサー1

よく。良いマニュアルページへのリンクを送った他のプログラマーの助けを借りて問題を解決しました。https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html そして主にhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_ExpressionsJavaScript プログラミング言語について説明します。

予想通り、サービス名を処理する1行だけ変更しました。

polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
    RegExp('my-daemon@[A-Za-z0-9_-]+.service').test(action.lookup("unit")) === true &&
    subject.user == "foo1") {
    return polkit.Result.YES;
}
});

RegExp()は関数であり、行の真ん中にある.testは「」内の正規表現を別の文字列でテストします。これはサービス名を求める関数です。同様の問題を抱えている他の人にも役立つことを願っています。

おすすめ記事