什么决定了用户启动了服务

什么决定了用户启动了服务

我认为 /lib/systemd/system/ 下的服务文件决定了服务以哪个用户身份启动。但显然情况并非总是如此。以下是示例:

~# ps faux
...
whoopsie  1445  0.0  0.1 388420 12604 ?        Ssl  08:22   0:00 /usr/bin/whoopsie -f
...

从上面的输出中我们可以看到,进程“whoopsie”在用户“whoopsie”下运行

现在我们看一下启动脚本:

~# cat /lib/systemd/system/whoopsie.service

Description=crash report submission daemon
After=network-online.target
Wants=network-online.target

[Service]
Environment="CRASH_DB_URL=https://daisy.ubuntu.com"
ExecStart=/usr/bin/whoopsie -f
Restart=always

[Install]
WantedBy=multi-user.target

在该启动脚本中没有用户定义。

那么什么决定了进程以哪个用户启动?

答案1

附加信息,此 whoopsie 进程启动后,将用户 ID 从 root 更改为 whoopsie。

源代码:

/* Drop privileges */
if (setgroups (1, &pw->pw_gid) < 0 ||
    setresgid (pw->pw_gid, pw->pw_gid, pw->pw_gid) < 0 ||
    setresuid (pw->pw_uid, pw->pw_uid, pw->pw_uid) < 0) {
    g_set_error (error, g_quark_from_static_string ("whoopsie-quark"), 0,
                 "Failed to become user: %s", username);
    return;
}

从: https://github.com/pexip/os-whoopsie-daisy/blob/master/src/whoopsie.c#L838

setresuid 是改变用户的函数

参考: http://man7.org/linux/man-pages/man2/setresuid.2.html

答案2

虽然您的观察是正确的,但这不是 systemd 造成的。Whoopsie 以 root 身份运行,只是放弃了其权限。

答案3

请参考用户或组如果未指定任何内容,则适用某些默认值。默认值为“root”。

相关内容