我可以在当前(shell)进程中添加到我的组中吗?

Kei*_*son 7 shell process group

如果我将自己添加到一个组中,则它仅适用于新启动的进程。实际上它比这更受限制;它似乎只适用于新登录。我不确定确切的机制是什么,但这不是我的问题(尽管我对此也很好奇)。

我的问题是:是否可以在当前 shell 进程中更新我的组成员身份?

我怀疑答案是否定的。

一个例子(这不是直接复制和粘贴):

$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2
$ sudo adduser kst newgroup
[sudo] password for kst:
Adding user `kst' to group `newgroup' ...
Adding user kst to group newgroup
Done.
$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2 newgroup
$
Run Code Online (Sandbox Code Playgroud)

在 之后adduser,我的帐户是 的成员newgroup,但该成员身份并未反映在当前的 shell 进程中。

显而易见的解决方案是注销并重新登录,但这很不方便。

bon*_*ing 5

从流程本身之外,这是不可能的。有关更多讨论和涉及使用调试器附加到进程并从其中运行的答案,请参阅此超级用户问题setgid()

需要新登录才能获得新组成员身份的原因是login(或sshd其他)以 root身份运行,并且必须为 shell 进程设置进程 UID 和 GID,这意味着它已经在调用setuidsetgid.