如何在无需重新启动的情况下应用新添加的用户组的更改?

如何在无需重新启动的情况下应用新添加的用户组的更改?

假设我使用用户登录takpar

takpar@skyspace:/$

作为 root,我使用以下命令添加takpar为组成员webdev

# usermod -a -G webdev takpar

但它似乎还没有被应用,因为例如我无法进入webdev具有组读取权限的目录:

400169 drwxr-x--- 3 webdev webdev 4.0K 2011-08-15 22:34 public_html

takpar@skyspace:/home/webdev/$ cd public_html/
bash: cd: public_html/: Permission denied

但重新启动后,我可以按预期访问。由于这种组更改是我的日常工作,有什么方法可以在不需要重新启动的情况下应用更改?

回答 似乎没有办法让当前会话知道新组,例如文件管理器将无法处理新更改。但重新登录即可完成工作。该su命令也适用于当前会话中的临时命令。

答案1

本地解决方案:使用su yourself重新登录。在新会话中,您将被视为该组的成员。


更改当前组 ID(并登录到新组)的手册页可能newgrp也有兴趣:sg

  • webdev在当前 shell 中使用 的组 ID(和权限),请使用:

     newgrp webdev
    
  • 要使用某个组 ID 启动命令(并在 shell 中保留当前权限),请使用:

     sg webdev -c "command"
    

    sg类似于su但对于组,如果您在系统数据中被列为组的成员,则无需组密码即可工作)

答案2

重新启动系统是一种矫枉过正的行为,如果您使用gpasswd.

您可以使用以下方式添加takparwebdev组:

$ gpasswd -a <user> <group> 

在你的情况下,它将是: $ gpasswd -a takpar webdev

您可以使用getent group {name}命令检查组成员身份:

$ getent group webdev
webdev:x:1008:webdev,takpar

这应该与 相同cat /etc/group | grep webdev。为了完整起见,这里是shell 会话id的输出:takpar

$ id takpar
uid=1007(takpar) gid=1007(takpar) groups=1007(takpar),1008(webdev)

答案3

id webdev

这里似乎是错误的——你想了解你自己的id,,takpar不是webdev

id如果比较和的输出id takpar,您会发现前者尚未显示更改,而后者则显示更改。为什么?这是因为id显示了当前进程的组。如果您注销并重新登录,或者甚至只打开一个新的终端窗口,您应该已经看到更改而无需重新启动。

相关内容