나는 이것을 가지고있다갑자기 나타나다스크립트는 다음과 같습니다.
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 restart
jobA에서 생성하는 대신 /etc/init/myservice-hook.conf
jobA가 실행되는 동안 생성하고 트리거합니다(답변에 따라).
내 입장에서는 스크립트가 루트로 실행되도록 setuid
두 가지를 모두 제거한 다음 선택적으로 스크립트를 넣어 문제를 해결했습니다 . 제공된 답변을 사용하겠습니다. 문제를 더 잘 격리할 수 있다고 생각하기 때문입니다.setgid
sudo -u userA <command>
답변1
한 가지 옵션은 다음과 같이 다른 작업을 만드는 것입니다.
start on started jobA
task
exec service myservice restart
그런 다음 실행 후 스크립트에서 setuid 루트 비트와 그 아래 항목을 제거합니다.