私はこれを持っています突然現れるスクリプトは次のとおりです。
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
別のユーザーとして実行する必要があります。
この問題をどのように解決できますか?何の解決策もなく、一日中頭だけが傷つきました。
答えが示すように、1つの方法はその他以前の upstart スクリプトの実行時に実行される upstart ジョブ。そのため、service myservice restart
jobAで作成するのではなく、/etc/init/myservice-hook.conf
jobAの実行中に作成してトリガーします(答えに応じて)。
私の立場では、スクリプトがrootとして実行されるようsetuid
に両方を削除し、オプションでスクリプトを配置して問題を解決しました。提供された回答を使用します。問題をよりよく分離できると思うからです。setgid
sudo -u userA <command>
答え1
1つのオプションは、次のように別のタスクを作成することです。
start on started jobA
task
exec service myservice restart
次に、実行後にスクリプトからsetuidルートビットとその下のエントリを削除します。