사용자로서 systemd 시스템 서비스 제어

사용자로서 systemd 시스템 서비스 제어

사용자 제어가 필요한 몇 가지 서비스가 있지만 이를 사용자 서비스로 사용할 수 없으며(그 요구 사항은 루트 액세스가 가능한 시스템 서비스임) 수정할 수 없는 이상한 GROUP/216 오류도 있습니다. 내가 무엇을 시도하든 상관없어요.

이름으로 템플릿 서비스를 만들었습니다.[이메일 보호됨]이므로 로 시작해야 합니다 systemctl start my-daemon@<parameter>.service. 매개변수는 영숫자 문자열이며 공백, 탭, 특수 문자 등을 포함할 수 없습니다.

내가 읽고특정 사용자로만 시스템 서비스를 다시 시작하시겠습니까?"sudo 방법"을 시도했지만 템플릿 서비스를 사용하고 있기 때문에 상당한 보안 문제가 발생합니다.

사용자 사용자 이름으로 서비스를 중지할 수 있는 sudo 줄의 예:

username ALL= NOPASSWD: /bin/systemctl stop my-daemon@*.service

그러나 이 줄을 사용하면 다음 명령도 실행할 수 있으므로 보안상의 악몽이라는 점을 잘 알고 있습니다.

sudo systemctl stop my-daemon@xyz firewalld.service

다음은 두 개의 샘플 polkit 파일입니다. 하나는 정적 서비스 이름이고 다른 하나는 템플릿입니다. 둘 다 /etc/polkit-1/rules.d/에 있습니다:

polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.systemd1.manage-units" && action.lookup("unit") == "my-daemon2.service" && subject.user == "username") { return polkit.Result.YES; } });

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

질문:

  1. 선택한 서비스만 사용자의 사용자 이름으로 실행할 수 있도록 sudo 문을 수정하려면 어떻게 해야 합니까? 이 분의 글을 읽고 제가 직접 고치려고 했으나 실패했습니다.
  2. 저는 polkit을 사용하는 것을 선호합니다. 저는 polkit 버전 0.112를 가지고 있습니다. Journalctl을 통해 polkit이 새로운 규칙을 추가하는 것을 볼 수 있지만 올바른 규칙을 얻을 수 없습니다. 정적 서비스 이름을 사용해도 이를 제어할 수 없습니다. 내가 뭘 잘못했나요?

답변1

많은 테스트와 연구 끝에 마침내 스스로 대답할 수 있게 되었습니다.

1) 그 자체로는 불가능하다. [a-zA-Z0-9_-]* 정규식과 같은 것을 작성할 방법은 없습니다. 문자열의 문자 수를 정확히 알고 있다면 가능하지만 상황에 따라 달라질 수 있습니다.

2) 내가 의견에서 말했듯이 옵션 2도 나왔습니다. 내 systemd 버전에는 systemd 지원이 필요하지 않습니다. 필요한 시스템 패키지를 업그레이드하는 것은 가능하지만 시간이 없습니다.

그래서 약간 수정된 옵션을 선택했습니다. 사용자가 서비스를 직접 제어하는 ​​것을 허용하지 않고, 시작 스크립트가 sudo에서 수행할 수 없는 모든 검사를 수행하도록 허용합니다. 모든 일이 잘된다면그 다음에서비스가 호출됩니다.

관련 정보