是否可以查询服务并知道它是从 发起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。如果你使用这样的功能,那么你需要先确定id。
struct passwd * p = getpwnam("my-global-service-user-name");
if(getuid() == p->pw_uid)
...
用户名可以是"root"
,该函数将返回/etc/passwd
已设置为 0 的 root 用户的条目uid
。