Linux中用户账号可以相同,鸟哥的 Linux 私房菜 -- Linux 账号管理

认识了账号相关的两个文件 /etc/passwd 与 /etc/shadow 之后,你或许还是会觉得奇怪,

那么群组的配置文件在哪里?还有,在 /etc/passwd 的第四栏不是所谓的 GID 吗?那又是啥?

呵呵~此时就需要了解 /etc/group 与 /etc/gshadow 啰~

/etc/group 文件结构

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

[root@www ~]# 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

这个文件每一行代表一个群组,也是以冒号『:』作为字段的分隔符,共分为四栏,每一字段的意义是:

组名:

就是组名啦!

群组口令:

通常不需要配置,这个配置通常是给『群组管理员』使用的,目前很少有这个机会配置群组管理员啦!

同样的,口令已经移动到 /etc/gshadow 去,因此这个字段只会存在一个『x』而已;

GID:

就是群组的 ID 啊。我们 /etc/passwd 第四个字段使用的 GID 对应的群组名,就是由这里对应出来的!

此群组支持的账号名称:

我们知道一个账号可以加入多个群组,那某个账号想要加入此群组时,将该账号填入这个字段即可。

举例来说,如果我想要让 dmtsai 也加入 root 这个群组,那么在第一行的最后面加上『,dmtsai』,注意不要有空格,

使成为『 root:x:0:root,dmtsai 』就可以啰~

谈完了 /etc/passwd, /etc/shadow, /etc/group 之后,我们可以使用一个简单的图示来了解一下 UID / GID 与口令之间的关系,

图示如下。其实重点是 /etc/passwd 啦,其他相关的数据都是根据这个文件的字段去找寻出来的。

下图中, root 的 UID 是 0 ,而 GID 也是 0 ,去找 /etc/group 可以知道 GID 为 0 时的组名就是 root 哩。

至于口令的寻找中,会找到 /etc/shadow 与 /etc/passwd 内同账号名称的那一行,就是口令相关数据啰。

e1c9d4376c4fe8dc5ec5a94bd8f21898.gif

图 1.3.1 、账号相关文件之间的 UID/GID 与口令相关性示意图

至于在 /etc/group 比较重要的特色在于第四栏啦,因为每个使用者都可以拥有多个支持的群组,这就好比在学校念书的时候,

我们可以加入多个社团一样! ^_^。不过这里你或许会觉得奇怪的,那就是:『假如我同时加入多个群组,那么我在作业的时候,到底是以那个群组为准?』

底下我们就来谈一谈这个『有效群组』的概念。

有效群组(effective group)与初始群组(initial group)

还记得每个使用者在他的 /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 这个使用者的身份登陆后,该如何知道我所有支持的群组呢?

很简单啊,直接输入 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 就是了。如果以图示来看就是如下所示:

5d6588958f5cd9ce87ef1bc633b196fa.gif

图 1.3.2 、newgrp 的运行示意图

虽然用户的环境配置(例如环境变量等等其他数据)不会有影响,但是使用者的『群组权限』将会重新被计算。

但是需要注意,由于是新取得一个 shell ,因此如果你想要回到原本的环境中,请输入 exit 回到原本的 shell 喔!

既然如此,也就是说,只要我的用户有支持的群组就是能够切换成为有效群组!好了,

那么如何让一个账号加入不同的群组就是问题的所在啰。你要加入一个群组有两个方式,一个是透过系统管理员 (root) 利用

usermod 帮你加入,如果 root 太忙了而且你的系统有配置群组管理员,那么你可以透过群组管理员以

gpasswd 帮你加入他所管理的群组中!详细的作法留待下一小节再来介绍啰!

/etc/gshadow

刚刚讲了很多关于『有效群组』的概念,另外,也提到 newgrp 这个命令的用法,

但是,如果 /etc/gshadow 这个配置没有搞懂得话,那么 newgrp 是无法动作的呢!

鸟哥测试机的 /etc/gshadow 的内容有点像这样:

[root@www ~]# head -n 4 /etc/gshadow

root:::root

bin:::root,bin,daemon

daemon:::root,bin,daemon

sys:::root,bin,adm

这个文件内同样还是使用冒号『:』来作为字段的分隔字符,而且你会发现,这个文件几乎与 /etc/group

一模一样啊!是这样没错~不过,要注意的大概就是第二个字段吧~第二个字段是口令栏,

如果口令栏上面是『!』时,表示该群组不具有群组管理员!至于第四个字段也就是支持的账号名称啰~

这四个字段的意义为:

组名

口令栏,同样的,开头为 ! 表示无合法口令,所以无群组管理员

群组管理员的账号 (相关信息在 gpasswd 中介绍)

该群组的所属账号 (与 /etc/group 内容相同!)

以系统管理员的角度来说,这个 gshadow 最大的功能就是创建群组管理员啦!

那么什么是群组管理员呢?由于系统上面的账号可能会很多,但是我们 root 可能平时太忙碌,所以当有使用者想要加入某些群组时,

root 或许会没有空管理。此时如果能够创建群组管理员的话,那么该群组管理员就能够将那个账号加入自己管理的群组中!

可以免去 root 的忙碌啦!不过,由于目前有类似 sudo 之类的工具,

所以这个群组管理员的功能已经很少使用了。我们会在后续的 gpasswd 中介绍这个实作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值