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

Tim*_*Tim 6 linux users group

从 Linux 编程接口,关于/etc/passwd

这是可能的(但不寻常的)有与相同的用户ID的密码文件的多个记录,从而允许多个登录名称相同的用户ID。这允许多个用户使用不同的密码访问相同的资源(例如,文件)。不同的登录名可以与不同的组 ID 集相关联。

组 ID (GID)字段是此用户所属的第一个组的数字 ID 。此用户的更多组成员身份在系统组文件中定义。

关于/etc/group

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

/etc/passwd

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

  • 换句话说,同一个用户ID的不同用户名可以有不同的组ID,还是同一个用户ID的所有用户名都必须有相同的组ID?

谢谢。

Ste*_*itt 6

用户数据库中的密钥/etc/passwd或其他东西是登录名:这是您在登录时提供的用于标识自己的全部信息。从该密钥中,程序可以检索存储在用户数据库中的所有其他信息;发生这种情况时不考虑用户数据库中的任何其他用户,甚至是具有相同用户 ID 的其他用户。(通常,这是通过getpwnamgetpwnam_r直接或通过PAM 完成的。)

因此,登录名导致存储的密码、用户 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,但有不同的主次组。


小智 1

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

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

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

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

sudo usermod -a -G groupname username
Run Code Online (Sandbox Code Playgroud)

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