首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GID,当前的,主的,补充的,有效的和真实的组ID?

GID,当前的,主的,补充的,有效的和真实的组ID?
EN

Unix & Linux用户
提问于 2011-08-06 18:33:12
回答 2查看 38.5K关注 0票数 26

下面的链接在不同的上下文中讨论这些概念。我读过他们的定义,但我仍然不知道它们之间有什么关系,或者其中一些是一样的。

  • 当前组ID
  • 组ID
  • 主组和补充组ID
  • 有效和真实的组ID (亦称维基百科)

这里是我困惑的原因之一:

根据man id,如果我输入id,我应该得到他们所说的有效和真实的组ID。

代码语言:javascript
复制
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

但是,维基百科引用id的输出来区分主ID和补充ID。此外,维基百科区分了主要的和补充的和有效的和真实的组ids。这些概念是如何相互关联的?

另外,主组ID =组ID =当前组ID是真的吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2011-08-06 22:36:39

你在这里混合了两个不同的区别:

  1. 在实际和有效的组ids之间
  2. 主要用户组与辅助用户组之间

第一个区别是指进程是如何运行的。通常,当您运行命令/程序时,它是以用户的权限运行的。它的真实组id与用户的主组相同。这可以由进程更改,以便作为另一个特殊组的成员执行某些任务。为此,程序使用更改其有效组id的setgid函数。

第二个区别是指用户。每个用户都有他/她的主组。每个用户只有一个,在id命令的输出中称为gid。除此之外,每个用户都可以属于多个辅助组--这些组列在id输出的末尾。

编辑:

我同意id的管理手册在这里有些误导。这可能是因为它是信息文档提供的描述的精简版本。要更清楚地看到它,请运行info coreutils "id invocation" (如id手册末尾所建议的)。

票数 30
EN

Unix & Linux用户

发布于 2011-08-07 23:30:23

内核视图

从概念上讲,有三组组是流程的成员。每一组都是以下集合的子集。

  1. 单个组,它是进程的默认组,由该进程创建的文件将属于该组。
  2. 当组需要打开文件的权限时选中的组集合。
  3. 以额外权限运行的进程可以利用的组集。

由于历史原因,这些集合分别是:

  1. 有效组ID (egid);
  2. 有效组ID加补充组ID
  3. 以上所有这些加上实组ID保存集-组-ID

通常,程序只有一个用户ID。如果可执行程序设置了塞图德模式位,那么程序就有两个用户ID :它的有效用户ID是文件权限、每个用户限制、确定进程是否以根用户身份运行的有效用户ID。进程可以在有效用户if和实际用户if之间切换,如果它不需要任何时候都需要额外的权限,或者需要在两个非根用户之间切换。

对于组也存在相同的机制。对于组,有一个在系统设计时不存在的附加特性:进程可以是任意数量组的成员;这些是辅助组ID。

用户数据库视图

一旦用户通过身份验证,登录过程就会切换到该用户,就在启动用户的shell (或用户请求的任何程序)之前。在切换到所需的用户(并失去根权限)之前,登录过程切换到所需的组。

在早期的unix版本中,进程只能在一个组中。这个组是用户的主组ID,存储在用户数据库中(通常是/etc/passwd)。该组将成为登录进程启动的shell或其他程序的真实有效组ID。

现在,一个进程可以是多个组,所以用户也可以是多个组。组数据库(通常是/etc/group)包含每个组的用户列表。这些组成为登录进程启动的程序的辅助组ID。

票数 19
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/18198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档