在`/etc/passwd`中,同一用户ID的不同用户名可以有不同的组ID吗?

在`/etc/passwd`中,同一用户ID的不同用户名可以有不同的组ID吗?

来自 Linux 编程接口,关于/etc/passwd

密码文件中可能有多个具有相同用户 ID 的记录(但不常见),因此允许多个登录名为了相同的用户ID。这允许多个用户使用不同的密码访问相同的资源(例如文件)。不同的登录名可以与不同组的组ID

组 ID (GID)字段是第一个组的数字 ID,其中该用户是会员。该用户的其他组成员身份在系统组文件中定义。

关于/etc/group

用户列表字段是逗号分隔的列表用户名谁是该组的成员。 (该列表包括用户名 而不是用户 ID,因为如前所述,用户 ID 在密码文件中不一定是唯一的。)

/etc/passwd

  • 组 ID 字段取决于用户名还是用户 ID?

  • 换句话说,同一用户ID的不同用户名是否可以具有不同的组ID,或者同一用户ID的所有用户名必须具有相同的组ID吗?

谢谢。

答案1

用户数据库中的密钥/etc/passwd或其他内容是登录名:这是您在登录时提供的用于识别自己身份的全部内容。通过该密钥,程序可以检索存储在用户数据库中的所有其他信息;发生这种情况时,不会考虑用户数据库中的任何其他用户,甚至具有相同用户 ID 的其他用户。 (通常,这是通过getpwnam或者getpwnam_r,直接或通过帕姆。)

因此,登录名导致存储的密码、用户 ID、(主)组 ID、GECOS 信息、主目录和 shell。这意味着两个用户可以共享相同的用户 ID,但具有不同的主目录和 shell! (这在过去通常用于为 root 提供后备、静态链接的 shell;您将拥有rootid 0 和 shell/bin/bash或其他用户的普通用户,以及另一个用户,例如sashrootid 0 和不同的 shell .)

因此答案是

组 ID 字段取决于用户名还是用户 ID?

是它仅取决于用户名。

组数据库中的键也是组名称。根据该密钥,程序可以检索存储在组数据库中的所有其他信息;同样,这种情况发生时不考虑组数据库中的任何其他组。 (确定用户的次要组时,该过程比读取用户数据库更复杂:没有函数列出给定用户所属的组,因此这通常在涉及以下内容的循环中完成getgrentendgrent.)

因此,组名导致组密码、组 ID 和组成员列表(即用户名列表)。要构建用户的辅助组集,需要枚举所有组,并将用户的登录名与组的成员进行匹配。因此,具有相同用户 ID 的两个不同用户不仅可以拥有不同的主要组,而且还可以属于不同的辅助组集!

因此答案是

换句话说,同一用户ID的不同用户名是否可以具有不同的组ID,或者同一用户ID的所有用户名必须具有相同的组ID吗?

一个用户的组只取决于用户名,不同的用户名可以共享一个用户id,但有不同的主组和次组。

答案2

组 ID 字段取决于用户名还是用户 ID?

不需要。/etc/passwd 条目行中的每个帐户条目都有用户名、UID(用户 ID)和 GID(组 ID)等必填字段。但 GID 并不“依赖”任何东西。您可以/etc/group使用 addgroup 命令添加您自己的自定义组。

换句话说,同一用户ID的不同用户名是否可以具有不同的组ID,或者同一用户ID的所有用户名必须具有相同的组ID吗?

是的,如果您想知道的话,UID 和 GID 之间不存在“依赖关系”。条目中的 GID表示用户的默认组 ID,但您可以使用命令/etc/passwd将用户分配到任意多个组:/etc/groupusermod

sudo usermod -a -G groupname username

您还可以将默认 GID 更改为您想要的任何内容。默认情况下会创建与用户同名的 GID,但这不是硬性要求。你可以改变它。

相关内容