GNU/Linux >> Linux の 問題 >  >> Linux

SystemdテンプレートユニットファイルのPolkitルール?

systemdテンプレートファイルのpolkitルールを作成する方法を理解しようとしています。インスタンス化される実際のサービスを使用すると、ルールがトリガーされます([email protected] )ただし、インスタンス識別子の文字列を省略した場合はそうではありません([email protected]

完全な作業ルールは次のとおりです。

polkit.addRule(function(action, subject) {
  if ( action.id == "org.freedesktop.systemd1.manage-units") {
    if (action.lookup("unit") == "[email protected]" && subject.isInGroup("wheel")) {
      var verb = action.lookup("verb");
      if (verb == "start" || verb == "stop" || verb == "restart") {
        return polkit.Result.YES;
      }
    }
  }
  polkit.log("action=" + action);
  polkit.log("subject=" + subject);
});

私の勘では、javascript正規表現を使用して、「@」と「.service」の間の文字列をグロブすることができますが、それを完全に理解することはできません。

私のVPNプロバイダーには多くの可能なサーバーがあり、それぞれに独自の構成([メールで保護された]テンプレートユニットファイルによって参照される)があるため、テンプレートのインスタンスごとにpolkitルールを作成する必要はありません。
どうもありがとうございました!

更新:

正規表現を使用してテンプレートファイルをテストし、上記の私の勘に従ってこれを解決しました。これはおそらく安全ではありませんか?

polkit.addRule(function(action, subject) {
  if ( action.id == "org.freedesktop.systemd1.manage-units") {
      var instance = /[email protected][a-z]+.service/.test(action.lookup("unit"));
    if ( instance === true && subject.isInGroup("wheel")) {
      var verb = action.lookup("verb");
      if (verb == "start" || verb == "stop" || verb == "restart") {
        return polkit.Result.YES;
      }
    }
  }
  polkit.log("action=" + action);
  polkit.log("subject=" + subject);
});

承認された回答:


Linux
  1. 起動時にsystemdユニットを管理する方法

  2. Systemdのスタートアップスクリプトを書く方法は?

  3. 基本的なSystemdサービスファイルを作成しますか?

  1. 最も古いファイルを移動するためのシェルスクリプト?

  2. SshfsにマウントされたファイルシステムにUmaskを設定しますか?

  3. Systemd:生成されたユニットファイルを無効にできませんか?

  1. 新しいファイルのフォルダを監視するスクリプト?

  2. Systemdユニットファイルを入れますか?

  3. 別の成功時にSystemdRunユニット?