还记得每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID 吧?那个 GID 就是所谓的『初始用户组 (initial group) 』!也就是说,当用户一登陆系统,立刻就拥有这个用户组的相关权限。 举例来说,我们上面提到 dmtsai 这个使用者的 /etc/passwd 与 /etc/group 还有 /etc/gshadow 相关的内容如下:
[root@www ~]# usermod -G users dmtsai <==先配置好次要群组 [root@www ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow /etc/passwd:dmtsai:x:503:504::/home/dmtsai:/bin/bash /etc/group:users:x:100:dmtsai <==次要群组的配置 /etc/group:dmtsai:x:504: <==因为是初始群组,所以第四字段不需要填入账号 /etc/gshadow:users:::dmtsai <==次要群组的配置 /etc/gshadow:dmtsai:!::
在 /etc/passwd 里面,dmtsai 这个使用者所属的用户组为 GID=504 ,搜寻一下 /etc/group 得到 504 是那个名为 dmtsai 的用户组, initial group。因为是初始用户组, 使用者一登陆就会主动取得,不需要在 /etc/group 的第四个字段写入该账号。
但非 initial group 的其他用户组可就不同。举上面这个例子来说,我将 dmtsai 加入 users 这个用户组当中,由于 users 这个用户组并非是 dmtsai 的初始用户组,因此, 必须要在 /etc/group 这个文件中,找到 users 那一行,并且将 dmtsai 这个账号加入第四栏, 这样 dmtsai 才能够加入 users 这个用户组。
那么在这个例子当中,因为我的 dmtsai 账号同时支持 dmtsai 与 users 这两个用户组, 因此,在读取/写入/运行文件时,针对用户组部分,只要是 users 与 dmtsai 这两个用户组拥有的功能, 我 dmtsai 这个使用者都能够拥有喔!这样瞭呼?不过,这是针对已经存在的文件而言, 如果今天我要创建一个新的文件或者是新的目录,请问一下,新文件的用户组是 dmtsai 还是 users ?呵呵!这就得要检查一下当时的有效用户组了 (effective group)。
以 dmtsai 这个使用者的身份登陆后,该如何知道我所有支持的用户组呢? 直接输入 groups。结果像这样:
[dmtsai@www ~]$ groups dmtsai users
dmtsai 用户同时属于 dmtsai 及 users 这个两个用户组,而且, 第一个输出的用户组即为有效用户组 (effective group) 了。dmtsai 有效用户组为 dmtsai 。如果以 touch 去创建一个新档,例如: 『 touch test 』,文件的拥有者为 dmtsai ,而且用户组也是 dmtsai 。
[dmtsai@www ~]$ touch test [dmtsai@www ~]$ ll -rw-rw-r-- 1 dmtsai dmtsai 0 Feb 24 17:26 test
那么如何变更有效用户组呢?就使用 newgrp。但是使用 newgrp 是有限制的,那就是要切换的用户组必须是你已经有支持的用户组。举例来说, dmtsai 可以在 dmtsai/users 这两个用户组间切换有效用户组,但是 dmtsai 无法切换有效用户组成为 sshd 啦!使用的方式如下:
[dmtsai@www ~]$ newgrp users [dmtsai@www ~]$ groups users dmtsai [dmtsai@www ~]$ touch test2 [dmtsai@www ~]$ ll -rw-rw-r-- 1 dmtsai dmtsai 0 Feb 24 17:26 test -rw-r--r-- 1 dmtsai users 0 Feb 24 17:33 test2
此时,dmtsai 的有效用户组就成为 users 了。 newgrp 这个命令可以变更目前用户的有效用户组, 而且是另外以一个 shell 来提供这个功能,所以,dmtsai 这个使用者目前是以另一个shell 登陆的,而且新的 shell 给予 dmtsai 有效 GID 为 users 。如果以图示来看就是如下所示:
图 1.3.2 、newgrp 的运行示意图
虽然用户的环境配置(例如环境变量等等其他数据)不会有影响,但是使用者的『用户组权限』将会重新被计算。 但是需要注意,由于是新取得一个 shell ,因此如果想要回到原本的环境中,请输入 exit 回到原本的 shell 喔!
加入一个用户组有两个方式:一个是透过系统管理员 (root) 利用 usermod 加入,如果 root 太忙了而且你的系统有配置用户组管理员,那么你可以透过用户组管理员以 gpasswd 帮你加入他所管理的用户组中。