从 Linux 编程接口,关于/etc/passwd:
这是可能的(但不寻常的)有与相同的用户ID的密码文件的多个记录,从而允许多个登录名称为相同的用户ID。这允许多个用户使用不同的密码访问相同的资源(例如,文件)。不同的登录名可以与不同的组 ID 集相关联。
组 ID (GID)字段是此用户所属的第一个组的数字 ID 。此用户的更多组成员身份在系统组文件中定义。
关于/etc/group:
用户列表字段是以逗号分隔的作为该组成员的用户名称的列表。(此列表由用户名 而不是用户 ID 组成,因为如前所述,用户 ID 在密码文件中不一定是唯一的。)
在/etc/passwd,
组 ID 字段取决于用户名还是用户 ID?
换句话说,同一个用户ID的不同用户名可以有不同的组ID,还是同一个用户ID的所有用户名都必须有相同的组ID?
谢谢。
用户数据库中的密钥/etc/passwd或其他东西是登录名:这是您在登录时提供的用于标识自己的全部信息。从该密钥中,程序可以检索存储在用户数据库中的所有其他信息;发生这种情况时不考虑用户数据库中的任何其他用户,甚至是具有相同用户 ID 的其他用户。(通常,这是通过getpwnam或getpwnam_r直接或通过PAM 完成的。)
因此,登录名导致存储的密码、用户 ID、(主要)组 ID、GECOS 信息、主目录和 shell。这意味着两个用户可以共享相同的用户 ID,但具有不同的主目录和 shell!(这在过去通常用于为 root 提供后备的、静态链接的 shell;您将拥有rootid 为 0 和 shell/bin/bash或其他什么的普通用户,以及另一个用户,例如sashrootid 0 和不同的 shell .)
因此答案是
组 ID 字段取决于用户名还是用户 ID?
是它只取决于用户名。
组数据库中的键也是组名。程序可以从该密钥中检索存储在组数据库中的所有其他信息;再次发生这种情况时不考虑组数据库中的任何其他组。(在确定用户的次要组时,该过程比读取用户数据库更复杂:没有列出给定用户所属组的功能,因此这通常在涉及getgrent和endgrent的循环中完成。)
因此,组名导致组密码、组 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,但这不是硬性要求。你可以改变它。