我想,/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
在该启动脚本中没有用户定义。
那么是什么决定了哪个用户启动了一个进程呢?
虽然您的观察是正确的,但这不是由于 systemd。Whoopsie 以 root 身份运行并简单地放弃其权限。
附加信息,这个 whoopsie 进程在启动后将用户 ID 从 root 更改为 whoopsie。
源代码:
来自: https ://github.com/pexip/os-whoopsie-daisy/blob/master/src/whoopsie.c#L838
setresuid 是更改用户的功能
参考: http: //man7.org/linux/man-pages/man2/setresuid.2.html
如果未指定任何默认值,请参考用户或组。默认为“根”。