Systemd
如何執行想要從普通使用者的 systemd 服務成為 root 的程序?
我有一項服務,我開始使用 systemd。服務使用者和組更改為非特權使用者。
[Service] ... User=regular_user Group=regular_user ...
在某些時候,該服務需要啟動另一個程序,預計該程序將成為 root。另一個程序設置了它的“位”,它
setuid()
用來成為根。如果我啟動它,這個過程就可以正常工作。但是,不知何故,當服務嘗試啟動它時,該
setuid()
函式返回錯誤:不允許操作。
我已經看到了一些關於功能的選項,但我不知道是否需要使用這些選項來保持
setuid()
功能在我的服務中工作。我嘗試了一些事情,但到目前為止沒有任何幫助。例如,我嘗試過:
AmbientCapabilities=CAP_SETGID CAP_SETUID SecureBits=keep-caps
儘管該過程似乎不再產生錯誤,但它仍然沒有做它應該做的事情(同樣,如果我在我的控制台中執行該過程,它工作得很好!)
我實際上找到了NoNewPrivileges=選項,它允許我的程序子程序使用
setuid()
.從他們所說的來看,這當然不是一個應該輕易選擇使用的選項。但是,預設值為:不允許該
setuid()
功能。(他們所說的*“提升權限”*是什麼意思。)對我有用的是這樣做:
NoNewPrivileges=false
請注意,文件沒有明確說明此選項的預設設置在 Ubuntu 16.04 上為 true。這可能因作業系統而異。