Назад | Перейти на главную страницу

Что определяет пользователя, у которого запущены службы

Я думал, что служебные файлы в / 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".