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ましuserAsudo service myservice restart。実際に最適な場合は、実際にmyservice別のユーザーとして実行する必要があります。

この問題をどのように解決できますか?何の解決策もなく、一日中頭だけが傷つきました。


答えが示すように、1つの方法はその他以前の upstart スクリプトの実行時に実行される upstart ジョブ。そのため、service myservice restartjobAで作成するのではなく、/etc/init/myservice-hook.confjobAの実行中に作成してトリガーします(答えに応じて)。

私の立場では、スクリプトがrootとして実行されるようsetuidに両方を削除し、オプションでスクリプトを配置して問題を解決しました。提供された回答を使用します。問題をよりよく分離できると思うからです。setgidsudo -u userA <command>

ベストアンサー1

1つのオプションは、次のように別のタスクを作成することです。

start on started jobA

task

exec service myservice restart

次に、実行後にスクリプトからsetuidルートビットとその下のエントリを削除します。

おすすめ記事