如何知道一個服務是用戶服務還是系統服務?

如何知道一個服務是用戶服務還是系統服務?

是否可以查詢服務並知道它是從 發起lib/systemd/system還是從 發起/.config/systemd/user/

我正在編寫一項systemd服務,目前我已將其放入lib/systemd/system以 root 身份運行的服務中,但我也想讓它也適用於每個用戶。

我的服務中有一些檢查,需要知道它是否具有 root 存取權限。這就是為什麼我試圖弄清楚我是否可以獲得有關服務的此類資訊。

我正在使用 Ubuntu,但我想知道該解決方案是否systemd也適用於其他使用的發行版。

答案1

假設您的主服務以 root 身分執行,您可以進行一個非常簡單的測試,如下所示:

if(getuid() == 0)
{
    ...act as root...
}
else
{
    ...act as user...
}

您可能也對該功能感興趣seteuid()。這允許您在用戶之間進行更改,只有當您可以成為 root 用戶然後切換到任何其他用戶時,這才是真正可能的。如果可執行檔案具有該s標誌,您就可以成為 root,但對於服務而言,確實不建議這樣做(預設情況下,systemd 會阻止此類變更的發生)。

最後,systemd 允許您以 root 以外的使用者身分執行多用戶服務。這意味著它的標識符不會是0。

struct passwd * p = getpwnam("my-global-service-user-name");
if(getuid() == p->pw_uid)
...

使用者名稱可以是"root",該函數將傳回/etc/passwd已設定為 0 的 root 使用者的條目uid

相關內容