是否可以查詢服務並知道它是從 發起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
。