Upstart

Upstart - 啟動後節內的 setuid

  • August 27, 2014

我有這個看起來有點像這樣的新貴腳本:

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並讓它觸發(根據答案)。

在我這邊,我設法通過刪除兩者來解決問題setuidsetgid以便腳本以 root 身份執行,然後有選擇地放入sudo -u userA <command>腳本中。我將使用提供的答案,因為我認為它可以更好地隔離問題。

一種選擇是創建另一個工作,如下所示:

start on started jobA

task

exec service myservice restart

然後在啟動後腳本中刪除 setuid 根位及其下方的內容。

引用自:https://unix.stackexchange.com/questions/152182