一个Linux用户可以有多个主用户组吗?

一个Linux用户可以有多个主用户组吗?

单个 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_tuid_tsize_t 类型,如中所述<sys/types.h>

并在页面中types.h

nlink_tuid_t、 、gid_tid_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 系统中,用户只能属于一个主要组(由于遗留文件格式的影响),但主要组和次要组之间的区别几乎消失了。

相关内容