以非 root 使用者身分執行服務的建議方法是什麼?

以非 root 使用者身分執行服務的建議方法是什麼?

我有一個簡單的 init.d 腳本,用於啟動和停止進程。我將 init.d 稱為 root,但我希望它控制的進程以特定使用者身分執行。

網路上最常見的建議似乎是

su myuser -c "my_process args"

然而,這會創建第二個進程空間、新的外殼等,並且有些不優雅。

我更喜歡使用exec(),因為它取代了 shell,但這並不需要使用者作為參數。這是我應該setuid()首先使用的情況嗎?設定gid怎麼樣?有什麼需要注意的問題嗎?

或者,是否有特定於發行版的解決方案以不同使用者身分執行 init.d ?我的環境是Centos 6.4。

答案1

取決於發行版,但基於 RHEL 的發行版使用它們源自的 Bash 函數,/etc/rc.d/init.d/functionsdaemon函數本身只是runuser命令的包裝器。從我在原始檔中可以看出,它在功能上與su大多數情況下相同,只是不經過 PAM(可能是為了避免在某些情況下出現先有雞還是先有蛋的問題)。

這並不能真正回答你的反對意見,但服務就是這樣做的。您想要的整潔和整體邏輯一致性是諸如此類的動機的一部分systemd

答案2

使用su someuser -c ...就是所需要的。對於初學者來說,setuid()這是 shell 程式碼無法使用的系統呼叫。不要讓這件事變得比需要的更困難。

相關內容