Users
為什麼我需要使用 newgrp 或 su(或註銷並再次登錄)來應用新的組成員資格?
是什麼使新的組成員身份需要新的登錄(或由
su
or啟動的新登錄 shellnewgrp
)才能可見?僅僅執行另一個 bash(或任何其他 shell)實例
--login
是行不通的,但是像 su 或 newgrp 這樣的 suid root 可以工作。是否從父 shell 繼承或記憶體了隱藏新組成員身份的內容?
創建子程序時,程序使用者 ID 和組 ID 是從其父程序繼承的。
因此,當您更改使用者的組(實際上是更改磁碟上某處的配置文件)時,程序不會自動注意到它並更改其組 ID(無論如何,非 root 程序都沒有權限)。
當你開始 bash ……好吧,你只是開始 bash,沒有什麼特別的事情發生。它只是繼承父級(圖形外殼或其他 bash 可能)的組 ID。
但是當你執行 su 或 login 時,所有的魔法都會發生。他們檢查您是否被允許登錄並更改他們的使用者 ID 和組 ID(使用需要有效根 ID 的系統呼叫——這就是他們設置 suid 位的原因),以便他們的所有子程序都繼承這些 ID。