我认为,/lib/systemd/system/下面的服务文件确定了服务的启动用户。但很显然,情况并不总是如此。下面是一个例子:
~# ps faux
...
whoopsie 1445 0.0 0.1 388420 12604 ? Ssl 08:22 0:00 /usr/bin/whoopsie -f
...从上面的输出中我们可以看到,进程'whoopsie‘运行在用户'whoopsie’之下。
现在我们来看看startupscript:
~# 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在该启动脚本中,没有用户定义。
那么,是什么决定进程作为哪个用户启动的呢?
发布于 2020-04-01 18:00:42
附加信息,这个whoopsie进程在启动后将userid从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
发布于 2020-04-01 06:51:22
虽然你的观察是正确的,但这不是系统造成的。Whoopsie作为root运行,只需放弃它的特权。
发布于 2020-04-01 07:20:25
如果没有指定任何内容,请参考用户或组,一些缺省值是适用的。默认的是"root“。
https://serverfault.com/questions/1010358
复制相似问题