无需注销即可重新加载 Linux 用户的组分配

无需注销即可重新加载 Linux 用户的组分配

使用以下方式分配用户的次要组列表:

# usermod -G <grouplist> <user>

是否可以在不注销所有正在运行的会话的情况下强制该组分配生效?

这在以下情况下非常有用:屏幕会话与许多正在运行的 shell 共存,因为整个会话基本上需要被销毁才能使组分配生效。

我认为我可以使用以下方法在正在运行的 shell 中更改用户的主要组newgrp命令——是否有一些可以适用于次要组的替代方案?

理想情况下,我希望某些东西能够在每个 shell 中生效,而无需在每个 shell 中手动运行,但如果做不到,也许可以通过某种方式强制 Screen 在每个 shell 中执行相同的命令。

答案1

非常黑客,但你可以使用两层来newgrp实现针对特定群体的这一目标:

id -g

...将为您提供当前的主要组 ID。我们将orig_group以此为例进行说明。然后:

newgrp <new_group_name>

groups...将把您切换到该组作为主组,并将其添加到或返回的组列表中id -G。现在,进一步:

newgrp <orig_group_name>

...将为你提供一个 shell,你可以在其中看到新组,并且主要组是原始组。

这很糟糕,一次只能添加一个组,但是它帮助我几次添加组而无需退出/登录我的整个 X 会话(例如,将 fuse 作为组添加到用户,以便 sshfs 可以工作)。

笔记:

  • 这也不需要你输入密码,这su

  • 每次调用都会newgrp启动一个新 shell(作为当前 shell 的子 shell)

  • 当前 shell 可以用以下exec命令“替换”

    exec newgrp <new_group_name>
    
  • 使用exec将解决当前分支的缓存问题pstree

    即,如果您登录到窗口管理器,您启动的每个新终端都将成为比此练习“更正”的分支更早的分支的子分支,因此将继承缓存的 gid 映射。

答案2

在 shell 中,你可以发出以下命令

su - $USER

id 现在将列出新组:

id

答案3

这个巧妙的技巧来自此链接效果很好!

exec su -l $USER

我想我会把它发布在这里,因为每次我忘记如何做这件事时,这是谷歌中出现的第一个链接。

答案4

使用newgrp命令为我解决了问题:

newgrp <GroupName>

这篇博文有详细解释。

相关内容