Upstart - 시작 후 섹션의 setuid

Upstart - 시작 후 섹션의 setuid

나는 이것을 가지고있다갑자기 나타나다스크립트는 다음과 같습니다.

setuid userA
setgid userB

script
    # ... bunch of stuff run as userA
end script

post-start script
    # ... command run as userA

    # ... the following command needs to be run as root
    setuid root                  # <---- this is not legal syntax
    service myservice restart    # <---- I need to run this as root
end script

그래서 문서를 살펴보니 setuid가 내부적으로 작동하지 않고 sudoer 목록에도 없어서 그렇게 할 수 없다는 걸 post-start발견 userA했습니다 sudo service myservice restart. 실제로 가장 좋은 경우에는 실제로 myservice다른 사용자로 실행해야 합니다.

이 문제를 어떻게 해결할 수 있나요? 아무런 해결책도 없이 하루종일 머리만 긁적이었습니다.


대답에서 알 수 있듯이 한 가지 방법은다른이전 upstart 스크립트가 실행될 때 실행되는 upstart 작업입니다. 따라서 service myservice restartjobA에서 생성하는 대신 /etc/init/myservice-hook.confjobA가 실행되는 동안 생성하고 트리거합니다(답변에 따라).

내 입장에서는 스크립트가 루트로 실행되도록 setuid두 가지를 모두 제거한 다음 선택적으로 스크립트를 넣어 문제를 해결했습니다 . 제공된 답변을 사용하겠습니다. 문제를 더 잘 격리할 수 있다고 생각하기 때문입니다.setgidsudo -u userA <command>

답변1

한 가지 옵션은 다음과 같이 다른 작업을 만드는 것입니다.

start on started jobA

task

exec service myservice restart

그런 다음 실행 후 스크립트에서 setuid 루트 비트와 그 아래 항목을 제거합니다.

관련 정보