it-swarm.cn

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

假设我以用户takpar登录:

[email protected]:/$

作为根,我使用以下命令将takpar作为组webdev的成员添加:

# usermod -a -G webdev takpar

但似乎尚未应用,因为例如,我无法进入具有对组的读取权限的webdev的目录:

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

[email protected]:/home/webdev/$ cd public_html/
bash: cd: public_html/: Permission denied

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

答案似乎无法使当前会话知道新组,例如,文件管理器将无法进行新更改。但是重新登录即可完成工作。 su命令也适用于当前会话中的临时命令。

41
Alexar

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


newgrpsg的手册页也可能会引起您更改当前组ID(并登录到新组)的兴趣:

  • 要在当前的命令行管理程序中使用webdev的组ID(和特权),请使用:

     newgrp webdev
    
  • 要启动具有某些组ID的命令(并在Shell中保留当前特权),请使用:

     sg webdev -c "command"
    

    sgsu类似,但对于组来说,如果您在系统数据中列为该组的成员,则它无需使用组密码即可工作)

59
Stéphane Gimenez

重新启动系统实在是太过分了,如果您使用gpasswd,则即使注销和登录也没有必要。

您可以使用以下方式将takpar添加到webdev组:

$ gpasswd -a takpar webdev

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

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

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

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

在这里似乎是错误的-您想了解自己的idtakpar,而不是webdev

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

1
glglgl