[一天几个linux命令] 有效与初始用户组:group, newgrp

前言

认识了账号相关的两个文件/etc/passwd与/etc/shadow之后,你或许还是会觉得奇怪,那么用户组的配置文件在哪里?还有/etc/passwd的第四列不是所谓的GID吗?那又是是什么?此时就需要了解/etc/group与/etc/gshadow。

/etc/group文件结构

这个文件就是记录GID与组名的对应。鸟哥测试机的/etc/group内容有点像这样:

head -n 4 /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm

这个文件每一行代表一个用户组,也是以冒号“:”作为字段的分隔符,共分为四列,每一字段的意义是:

  1. 用户组名称:就是用户组名称啦!
  2. 用户组密码:通常不需要设置,这个设置通常是给“用户组管理员”使用的,目前很少有这个机会设置用户组管理员。同样,密码已经移动到/etc/gshadow去,因此这个字段只会存在一个“x”而已。
  3. GID 就是用户组的ID。我们/etc/passwd第四个字段使用的GID对应的用户组名就是由这里对应出来的。
  4. 此用户组支持的账号名称:我们知道一个账号可以加入多个用户组,那某个账号想要加入此用户组时,将该账号填入这个字段即可。举例来说,如果我想要让dmtsai也加入root这个用户组,那么在第一行的最后面加上”,dmtsai”,注意不要有空格,使其成为“root:x:0:root,dmtsai”就可以。

/etc/passwd /etc/shadow /etc/group之间的关系

谈完了/etc/passwd /etc/shadow /etc/group之后,我们可以使用一个简单的图示来了解一下UID/GID与密码之间的关系
这里写图片描述
其实重点是/etc/passwd 其他相关的数据都是根据这个文件的字段去找寻出来的。图中root的UID是0, 而GID也是0,寻找/etc/group可以知道GID为0时的组名就是root。至于密码的寻找中,会找到/etc/shadow与/etc/passwd内同账号名称的那一行,就是密码相关数据。

至于在/etc/group比较重要的特色在于第四列,因为每个用户都可以拥有多个支持的用户组,这就好比在学校念书的时候,我们可以加入多个社团一样。不过这里你或许会觉得奇怪的,那就是假如我同时加入多个用户组,那么我在作业的时候,到底是以哪个用户组为准?下面我们就来谈一谈这个“有效用户组”的概念。

有效用户组(effective group)与初始用户组(initial group)

还记得每个用户在他的/etc/passwd里面的第四列有所谓的GID吧?那个GID就是所谓的“初始用户组”(initial group)。也就是说,当用户登录系统,立刻就拥有这个用户组的相关权限的意思。举例来说,我们上面提到dmtsai这个用户的/etc/passwd与/etc/group还有/etc/gshadow相关的内容如下:

usermod -G users dmtsai ⇐ 先设置好用户组
grep dmtsai /etc/passwd /etc/group /etc/shadow
/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的初始用户组,因此,我必须要在/etc/group这个文件中找到users那一行,并且将dmtsai这个账号加入第四列,这样dmtsai才能够加入users这个用户组。

那么在这个例子当中,因为我的dmtsai账号同时支持dmtsai与users这两个用户组,因此,在读取/写入/执行文件时,针对用户部分,只要是users与dmtsai这两个用户组拥有的功能,dmtsai这个用户都能够拥有。不过,这是针对已经存在的文件而言,如果今天我要新建一个新的文件或者是新的目录,请问一下,新文件的组是dmtsai还是users?这得要检查一下当时的有效用户组了(effective group)

groups有效与支持用户组的查看

如果我以dmtsai这个用户的身份登陆后,该如何知道我的有支持的用户组呢?很简单啊,直接输入groups就可以了!注意,是groups,有加s呢!结果像这样:

groups
dmtsai users

在这个输出的信息中,可知道dmtsai这个用户同时属于dmtsai及users这个两个组,而且,第一个输出的用户组即为有效用户组(effective group)了。也就是说,我的有效用户组为dmtsai。此时,如果我以touch去创建一个新文件,例如”touch test”,那么这个文件的所有者为dmtsai,而且用户组也是dmtsai的。

touch test
ll
-rw-rw-r-- dmtsai dmtsai 0 Feb 24 17:26 test

这样是否可以了解什么是有效用户组?通常有效用户组的作用是新建文件。那么有效用户组是否能够变换?

newgrp:有效用户组的切换

那么如何更改有效用户组呢?就使用newgrp。不过使用newgrp是有限制的,那就是你想要切换的用户组必须是你已经有支持的用户组。举例来说,dmtsai可以在dmtsai/users这两个用户组间切换有效用户组,但是dmtsai无法切换有效用户组成为sshd。使用方式如下:

newgrp users
groups
users dmtsai
touch test2
ll
-rw-rw-r-- dmtsai dmtsai 0 Feb 24 17:26 test
-rw-rw-r-- dmtsai users 0 Feb 33 17:26 test2

此时,dmtsai的有效用户组就成为users了。我们额外来讨论一下newgrp这个命令,这个命令可以更新目前用户的有效用户组,而且是另外以一个shell来提供这个功能的,所以,以上面的例子来说,dmtsai这个用户目前是以另一个shell登陆的,而且新的shell给予dmtsai有效GID为users就是了。如果以图示来看就是如图所示
这里写图片描述

虽然用户的环境设置(例如环境变量等其他数据)不会有影响,但是用户的“用户组权限”将会重新计算。但是需要注意,由于是新取得一个shell,因此如果你想回到原本的环境中,请输入exit回到原本的shell。

既然如此,也就是说,只要我的用户有支持的用户组就是能够切换成为有效用户组。好了,那么如何让一个账号加入不同的用户组就是问题的所在。你要加入一个用户组有两个方式,一个是通过系统管理员(root)利用usermod帮你加入,如果root太忙了而且你的系统有设置用户组管理员,那么你可以通过用户组管理员以gpasswd帮你加入他所管理的用户组中!

/etc/gshadow

刚才讲了很多关于“有效用户组”的概念,另外,也提到newgrp这个命令的用法,但是,如果/etc/gsahdow这个设置没有弄懂的话,那么newgrp是无法操作的。鸟哥测试机的/etc/gshadow的内容有点像这样:

head -n 4 /etc/gshadow
root:::root
bin:::root,bin,deamon
deamon:::root,bin,deamon
sys:::root,bin,adm

这个文件内同样还是使用冒号“:”来作为字段的分隔字符,而且你会发现,这个文件几乎与/etc/group一模一样。是这样没错!不过,要注意的大概就是第二个字段。第二个字段是密码列,如果密码列上面是“!”时,表示该用户组不具有用户组管理员。至于第四个字段也就是支持的账号名称。这四个字段的意义为:

  1. 用户组名
  2. 密码列,同样,开头为!表示无合法密码,所以无用户组管理员
  3. 用户组管理员的账号
  4. 该用户组的所属账号(/etc/group内容相同)。

以系统管理员的角度来说,这个gshadow最大的功能就是创建组管理员啦!那么什么是用户组管理员呢?由于系统上面的账号可能会有很多,但是我们root可能平时太忙碌,所以当有用户想加入某些用户组时,root或许没有空管理。此时如果能够创建用户组管理员的话,那么该用户组管理员就能够将那个账号加入自己管理的用户组中!可以免去root的忙碌。不过,由于目前有类似sudo之类的工具,所以这个组管理员的功能已经很少用了。我们会在后续的gpasswd中介绍这个用法

总结

记忆 /etc/group /etc/gshadow的各字段的含义
学习groups, newgrp命令

参考文献

《鸟哥的私房菜-基础学习篇》

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值