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