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

Ale*_*xar 47 users permissions group

假设我使用用户登录takpar

takpar@skyspace:/$
Run Code Online (Sandbox Code Playgroud)

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

# usermod -a -G webdev takpar
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

但是重新启动后,我可以按预期访问。由于这种组更改在我的日常工作中,是否有任何方法无需重新启动即可应用更改?

回答 似乎没有办法让当前会话知道新组,例如文件管理器不会处理新更改。但是重新登录就可以了。该su命令也适用于当前会话中的临时命令。

Sté*_*nez 69

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


手册页newgrpsg也可能感兴趣更改当前组ID(和登录到一个新组):

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

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

     sg webdev -c "command"
    
    Run Code Online (Sandbox Code Playgroud)

    sg就像su但是对于组,如果您在系统数据中被列为组的成员,它应该可以在没有组密码的情况下工作)

  • @takpar:我刚刚检查过,实际上,当您在`/etc/group` 和`/etc/gshadow` 中被列为组成员时,它似乎应该可以在没有(组)密码的情况下工作。你的两个文件是否一致?(用`grpck -r`检查)。 (2认同)

Tom*_*art 6

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

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

$ gpasswd -a takpar webdev
Run Code Online (Sandbox Code Playgroud)

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

$ getent group webdev
webdev:x:1008:webdev,takpar
Run Code Online (Sandbox Code Playgroud)

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

$ id takpar
uid=1007(takpar) gid=1007(takpar) groups=1007(takpar),1008(webdev)
Run Code Online (Sandbox Code Playgroud)