![什么决定了用户启动了服务](https://linux22.com/image/750364/%E4%BB%80%E4%B9%88%E5%86%B3%E5%AE%9A%E4%BA%86%E7%94%A8%E6%88%B7%E5%90%AF%E5%8A%A8%E4%BA%86%E6%9C%8D%E5%8A%A1.png)
我认为 /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”。