Linux 中有没有一种方法可以更新用户/组属性而无需再次登录?

Linux 中有没有一种方法可以更新用户/组属性而无需再次登录?

在我编辑 /etc/group 并将用户添加到其不属于的组后,除非启动新会话,否则该用户将无法使用其新获得的权限。

是否有命令可以在正在进行的会话中刷新用户/组属性?

答案1

在内核级别,组成员身份是每个进程的属性。除非进程具有适当的能力(如果我没记错的话是 CAP_SETGID),即在所有意图和目的上都具有 root 权限,否则进程不能属于新组。

用户不是内核级别的对象;只有进程(和文件)才存在。进程有一个 uid(有效和其他)和一个组 id 列表。

当你将用户添加到组时,内核并不知道这意味着什么。它只是间接地知道,下次运行 /bin/login 或 /usr/bin/newgrp 时,具有该用户 ID 的进程将在其列表中拥有一个新的组 ID。

因此,回答你的问题,如果你说的是 Gnome 或 KDE 会话,你确实必须重新启动它。或者,如果你只关心与新组相关的一个命令的结果,你可以使用我刚才提到的 newgrp。它将使用新添加的组启动一个新 shell。

答案2

我之前读过新组命令可以执行此操作,但仅适用于当前 shell。似乎没有比注销并重新登录更好的选择。

答案3

exec sg <newGroup> newgrp例如exec sg sudo newgrp

这将用一个新 shell 替换你当前的 shell,该 shell 具有更新/刷新的次要的组(这与注销并重新登录效果相同)。

如果你浏览 Stack Exchange,你会看到很多建议使用newgrp没有将其包装在sg) - 这种方法修改了用户的基本的组,这将对在此 shell 会话期间创建的任何文件的组所有权产生不利影响。

这里了解更多信息。

相关内容