Я думал, что служебные файлы в / 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 меняет идентификатор пользователя с 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
Пожалуйста, обратитесь пользователь или группа если ничего не указано, применимы некоторые значения по умолчанию. По умолчанию это "root".