据我了解,Unix系统中的用户可以属于多个组,其中一个组将成为该用户的主要组。其他人将是补充小组。所有这些 用户/组基础设施/etc/group
和文件促进/etc/passwd
。
现在用户的组权限完全由活动组决定,可以通过newgrp
命令更改。登录时的活动组是/etc/passwd
文件中定义的主要组。那么问题是,尽管允许用户拥有多个补充组,但设计者选择采用单个活动组这一概念的根本原因是什么?如果所有组同时活动,会出现什么问题?
答案1
答案2
原因之一:创建文件时只能属于一组,而创建文件时没有指定该组。因此,必须有单一活跃群体的概念。
答案3
Q1:那么问题是,尽管允许用户拥有多个补充组,但设计者选择单一活动组这一概念的根本原因是什么?
Unix 中组的最初主要目的是允许共享对磁盘上文件的访问。在此用例中,您通常大部分时间都在访问文件,偶尔也会访问在一组用户之间共享的文件。
所以我怀疑它是围绕这个模型开始设计的。随着时间的推移,该模型已被修改,但一般方法保持不变,即您处于主要组中(在 中指定/etc/passwd
),并且您拥有可以成为其成员的补充组(在 中指定/etc/group
)。
一些早期的实现(例如在 Sun/Solaris 上)包括使用 NIS+ 时用户可以成为其中成员的总共约 15 个组的限制。
Q2:如果所有组同时活跃会出现什么问题?
POSIX 中有许多系统调用公开了采用这种设计的 API,因此考虑到目前围绕它构建的软件数量,修改它可能是一项艰巨的任务。而且也确实没有任何理由改变它。
其他大的限制是文件系统和进程空间。对于文件系统,这些通常仅包含给定文件或目录要“分组”到的 GID 的单个值。对于正在运行的进程也是如此。它们通常与一个组相关联。
然而,随着时间的推移,这种整体方法已经能够适应与 Active Directory 和其他凭据技术的集成,因此它是一个非常好的实现,尽管当您第一次了解它时有点奇怪。