Bash
是否有一個真實的使用者 ID 來標識創建流程的使用者?
根據glibc 手冊的程序角色部分:
A process also has a real user ID which identifies the user who created the process ...
因此,為了驗證這一點,我執行了以下命令:
ps -eo cmd,ruid,euid | grep 'bash\|login'
然後顯示(lgd賬號的uid為1000):
login --lgd 0 0 -bash 1000 1000
為什麼 ruid
bash
的值不是 0 ,因為它的創建者login
屬於 root 使用者?我誤解了它還是login
呼叫函式喜歡setuid()
改變 bash 的 ruid ?
login
確實在執行之前更改了使用者 IDbash
。在影子實現中,您可以在此處看到這一點,在 shell 啟動之前進行了很多進一步的設置。您引用的連結中描述的角色差異與 setuid 程序確實相關。如果您製作 的副本
id
,則將其設為 setuid,id -u
並將id -ru
顯示不同的值,後者是啟動該過程的使用者 ID。