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

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

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

我的问题是:是否可以更新我的群组成员身份在当前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
$

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

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

答案1

从流程本身的外部来看,这是不可能的。看这个超级用户问题有关使用调试器附加到进程并运行的更多讨论和答案setgid()从里面。

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

相关内容