我认为 /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 是改变用户的函数
答案2
虽然您的观察是正确的,但这不是 systemd 造成的。Whoopsie 以 root 身份运行,只是放弃了其权限。
答案3
请参考用户或组如果未指定任何内容,则适用某些默认值。默认值为“root”。