假设我使用用户登录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
.
您可以使用以下方式添加takpar
到webdev
组:
$ 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
显示了当前进程的组。如果您注销并重新登录,或者甚至只打开一个新的终端窗口,您应该已经看到更改而无需重新启动。