systemd 템플릿 단위 파일에 대한 Polkit 규칙

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

내 직감으로는 자바스크립트 정규식을 사용하여 "@"과 ".service" 사이에 문자열을 넣을 수 있다는 것인데, 잘 이해가 되지 않습니다.

내 VPN 제공업체에는 각각 고유한 구성을 가진 여러 개의 서버가 있습니다(제공:[이메일 보호됨]템플릿 단위 파일)이므로 템플릿의 모든 인스턴스에 대해 폴킷 규칙을 작성하고 싶지는 않습니다. 감사합니다!

고쳐 쓰다:

나는 위의 예감을 바탕으로 정규식을 사용하여 템플릿 파일을 테스트하여 이 문제를 해결했습니다. 아마도 이것은 안전하지 않은 것일까요?

polkit.addRule(function(action, subject) {
  if ( action.id == "org.freedesktop.systemd1.manage-units") {
      var instance = /openvpn-client@[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);
});

관련 정보