单个 Linux 用户可以拥有多少个主要组?如果他们可以拥有多个主要组,那么如何为一个用户分配多个主要组?如果只有一个,原因是什么?
答案1
不,主要组是唯一的,即为用户分配了一个主要组。这是由于 Unix 用户和组的概念。在 Unix 的早期,就是这样,次要组是后来才添加的。如果在 Unix 开发之初就存在多个组的分配,那么它们之间可能不会有任何区别。但现在看来,您只是看到了 Unix 的遗产。
注意:主要群体和次要群体之间的区别没有什么与 的格式有关/etc/passwd
。如果Unix/Linux 支持多个主组,那么 的格式/etc/passwd
肯定会反映这一点。次要组的分配方式/etc/group
实际上是一个拐杖。
答案2
这在 linux/unix 上是不可能的,主要组是文件 /etc/passwd 的第四个字段,它具有特定的格式:
username:*:userid:groupid:gecos:homedir:shell
第四个字段不允许使用整数列表。
次要组分配位于 /etc/group 中。在那里可以列出多个组中的用户。
答案3
用户不能拥有多个主要组。为什么?因为用于访问数据的 APIpasswd
将其限制为一个主要组。看man 3 getpwent
:
The getpwent() function returns a pointer to a structure containing
the broken-out fields of a record from the password database (e.g.,
the local password file /etc/passwd, NIS, and LDAP). The first time
getpwent() is called, it returns the first entry; thereafter, it
returns successive entries.
The passwd structure is defined in <pwd.h> as follows:
struct passwd {
char *pw_name; /* username */
char *pw_passwd; /* user password */
uid_t pw_uid; /* user ID */
gid_t pw_gid; /* group ID */
char *pw_gecos; /* user information */
char *pw_dir; /* home directory */
char *pw_shell; /* shell program */
};
笔记:gid_t pw_git
。标准规定为pwd.h
:
标
<pwd.h>
头应定义struct passwd
, 结构,该结构至少应包括以下成员:char *pw_name User's login name. uid_t pw_uid Numerical user ID. gid_t pw_gid Numerical group ID. char *pw_dir Initial working directory. char *pw_shell Program to use as shell.
标
<pwd.h>
头应定义gid_t
、uid_t
和size_t
类型,如中所述<sys/types.h>
。
并在页面中types.h
:
nlink_t
、uid_t
、 、gid_t
和id_t
应为整数类型。
因此,标准将主要组 ID 限制为单个整数。
答案4
在最早的 Unix 中,用户只属于一个组,并在/etc/passwd
文件中注册。这来自以一个用户和一个组的权限运行的进程,该条目为它们提供了登录时启动的 shell。
稍后,用户可以属于不同的组(以获得特定于组的访问权限)。有一个chgrp(1)
更改组的命令,本质上是使用新用户+组启动一个新的 shell。该文件/etc/group
列出了用户可能属于的组(以及要更改为该组的密码,如果适用)。记录的默认组/etc/passwd
称为基本的团体。
较新的 Unix 系统获得了多种数据库来注册用户/密码数据,我将继续讨论/etc/passwd
,/etc/group
为了简单起见,今天详细信息因具体配置而异。自 80 年代以来,这些文件的格式几乎没有变化,并且各个字段的一般含义都是一成不变的。用于访问用户数据的 Unix API 仍然取决于这些文件的布局。
即使到了后来,进程也可以同时属于多个组。因此,用户的进程(从登录 shell 开始)同时属于多个组,从 获取用户可以属于的所有组/etc/group
。
从前面的讨论来看,在现代 Unix 系统中,用户只能属于一个主要组(由于遗留文件格式的影响),但主要组和次要组之间的区别几乎消失了。