사용자 제어가 필요한 몇 가지 서비스가 있지만 이를 사용자 서비스로 사용할 수 없으며(그 요구 사항은 루트 액세스가 가능한 시스템 서비스임) 수정할 수 없는 이상한 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; } });
질문:
- 선택한 서비스만 사용자의 사용자 이름으로 실행할 수 있도록 sudo 문을 수정하려면 어떻게 해야 합니까? 이 분의 글을 읽고 제가 직접 고치려고 했으나 실패했습니다.
- 저는 polkit을 사용하는 것을 선호합니다. 저는 polkit 버전 0.112를 가지고 있습니다. Journalctl을 통해 polkit이 새로운 규칙을 추가하는 것을 볼 수 있지만 올바른 규칙을 얻을 수 없습니다. 정적 서비스 이름을 사용해도 이를 제어할 수 없습니다. 내가 뭘 잘못했나요?
답변1
많은 테스트와 연구 끝에 마침내 스스로 대답할 수 있게 되었습니다.
1) 그 자체로는 불가능하다. [a-zA-Z0-9_-]* 정규식과 같은 것을 작성할 방법은 없습니다. 문자열의 문자 수를 정확히 알고 있다면 가능하지만 상황에 따라 달라질 수 있습니다.
2) 내가 의견에서 말했듯이 옵션 2도 나왔습니다. 내 systemd 버전에는 systemd 지원이 필요하지 않습니다. 필요한 시스템 패키지를 업그레이드하는 것은 가능하지만 시간이 없습니다.
그래서 약간 수정된 옵션을 선택했습니다. 사용자가 서비스를 직접 제어하는 것을 허용하지 않고, 시작 스크립트가 sudo에서 수행할 수 없는 모든 검사를 수행하도록 허용합니다. 모든 일이 잘된다면그 다음에서비스가 호출됩니다.