Linux

是什麼決定了服務啟動的使用者

  • April 1, 2020

我想,/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

在該啟動腳本中沒有使用者定義。

那麼是什麼決定了哪個使用者啟動了一個程序呢?

附加資訊,這個 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 是更改使用者的功能

參考: http: //man7.org/linux/man-pages/man2/setresuid.2.html

引用自:https://serverfault.com/questions/1010358