Linux
是什麼決定了服務啟動的使用者
我想,/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 是更改使用者的功能