Upstart
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 在內部不起作用
post-start
,並且userA
不在 sudoer 列表中,所以我不能只做sudo service myservice restart
. 事實上,在最理想的情況下,我實際上應該myservice
以另一個使用者的身份執行。我該怎麼辦?我現在一整天都在撓頭,沒有任何解決方案。
正如答案所建議的,一種方法是創建另一個在前一個新貴腳本執行時執行的新貴作業。因此
service myservice restart
,我們不是在 jobA 中,而是在 jobA 執行時創建/etc/init/myservice-hook.conf
並讓它觸發(根據答案)。在我這邊,我設法通過刪除兩者來解決問題
setuid
,setgid
以便腳本以 root 身份執行,然後有選擇地放入sudo -u userA <command>
腳本中。我將使用提供的答案,因為我認為它可以更好地隔離問題。
一種選擇是創建另一個工作,如下所示:
start on started jobA task exec service myservice restart
然後在啟動後腳本中刪除 setuid 根位及其下方的內容。