Linux


        每一个使用者在他的 /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)。


groups: 有效与支持群组的观察

        假设我以 dmtsai 这个使用者的身份登陆后。该怎样知道我全部支持的群组呢? 非常easy啊,直接输入 groups 就能够了。注意喔。是 groups 有加 s 呢!结果像这样:

[dmtsai@www ~]$ groups
dmtsai users

        在这个输出的信息中。可知道 dmtsai 这个用户同一时候属于 dmtsai 及 users 这个两个群组,并且, 第一个输出的群组即为有效群组 (effective group) 了。

也就是说。我的有效群组为 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 啊!只是使用 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 就是了。假设以图示来看就是例如以下所看到的:


        尽管用户的环境配置(比如环境变量等等其它数据)不会有影响,可是使用者的『群组权限』将会又一次被计算。 可是须要注意,因为是新取得一个 shell 。因此假设你想要回到原本的环境中,请输入 exit 回到原本的 shell 喔!

        既然如此,也就是说。仅仅要我的用户有支持的群组就是可以切换成为有效群组。好了, 那么怎样让一个账号增加不同的群组就是问题的所在啰。

你要增加一个群组有两个方式,一个是透过系统管理员 (root) 利用 usermod 帮你增加,假设 root 太忙了并且你的系统有配置群组管理员,那么你可以透过群组管理员以 gpasswd 帮你增加他所管理的群组中!


原文地址:https://www.cnblogs.com/gccbuaa/p/7325156.html