Bash

是否有一個真實的使用者 ID 來標識創建流程的使用者?

  • February 22, 2022

根據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

為什麼 ruidbash的值不是 0 ,因為它的創建者login屬於 root 使用者?我誤解了它還是login呼叫函式喜歡setuid()改變 bash 的 ruid ?

login確實在執行之前更改了使用者 ID bash。在影子實現中,您可以在此處看到這一點,在 shell 啟動之前進行了很多進一步的設置。

您引用的連結中描述的角色差異與 setuid 程序確實相關。如果您製作 的副本id,則將其設為 setuid,id -u並將id -ru顯示不同的值,後者是啟動該過程的使用者 ID。

引用自:https://unix.stackexchange.com/questions/691730