为什么每次只能活跃一个组?

为什么每次只能活跃一个组?

据我了解,Unix系统中的用户可以属于多个组,其中一个组将成为该用户的主要组。其他人将是补充小组。所有这些 用户/组基础设施/etc/group和文件促进/etc/passwd

现在用户的组权限完全由活动组决定,可以通过newgrp命令更改。登录时的活动组是/etc/passwd文件中定义的主要组。那么问题是,尽管允许用户拥有多个补充组,但设计者选择采用单个活动组这一概念的根本原因是什么?如果所有组同时活动,会出现什么问题?

答案1

所有团体在任何时候都处于活跃状态。

您可以访问您的任何组可以访问的任何文件。 但是,当您创建新文件/进程时,它是使用您的主要组创建的, 除非设置gid或者ACL 默认值正在使用中。

答案2

原因之一:创建文件时只能属于一组,而创建文件时没有指定该组。因此,必须有单一活跃群体的概念。

答案3

Q1:那么问题是,尽管允许用户拥有多个补充组,但设计者选择单一活动组这一概念的根本原因是什么?

Unix 中组的最初主要目的是允许共享对磁盘上文件的访问。在此用例中,您通常大部分时间都在访问文件,偶尔也会访问在一组用户之间共享的文件。

所以我怀疑它是围绕这个模型开始设计的。随着时间的推移,该模型已被修改,但一般方法保持不变,即您处于主要组中(在 中指定/etc/passwd),并且您拥有可以成为其成员的补充组(在 中指定/etc/group)。

一些早期的实现(例如在 Sun/Solaris 上)包括使用 NIS+ 时用户可以成为其中成员的总共约 15 个组的限制。

Q2:如果所有组同时活跃会出现什么问题?

POSIX 中有许多系统调用公开了采用这种设计的 API,因此考虑到目前围绕它构建的软件数量,修改它可能是一项艰巨的任务。而且也确实没有任何理由改变它。

其他大的限制是文件系统和进程空间。对于文件系统,这些通常仅包含给定文件或目录要“分组”到的 GID 的单个值。对于正在运行的进程也是如此。它们通常与一个组相关联。

然而,随着时间的推移,这种整体方法已经能够适应与 Active Directory 和其他凭据技术的集成,因此它是一个非常好的实现,尽管当您第一次了解它时有点奇怪。

参考

=OpenGroup POSIX 文档提到 GID

相关内容