Linuxユーザーは複数のデフォルトユーザーグループを持つことができますか?

Linuxユーザーは複数のデフォルトユーザーグループを持つことができますか?

1 つの Linux ユーザーは、いくつの基本グループを持つことができますか?ユーザーが複数の基本グループを持つことができる場合、ユーザーに複数の基本グループをどのように割り当てますか? 1つしかないのなら、なぜですか?

答え1

いいえ、デフォルトグループは一意です。つまり、ユーザーにデフォルトグループが割り当てられます。これはUnixユーザーとグループの概念によるものです。 Unixの初期にはこのような場合があり、後でマイナーグループが追加されました。 Unix開発の初期に複数のグループへの割り当てがあった場合、それらの間に何の違いもなかった可能性があります。しかし今はUnixの遺産を見ているようです。

注:プライマリグループとセカンダリグループの違い何もないフォーマットによって異なります/etc/passwdもしUnix / Linuxは複数の基本グループをサポートしているため、フォーマットは/etc/passwdこれを確実に反映します。セカンダリグループの割り当て方法は/etc/group実際に支柱です。

答え2

これはlinux / unixでは不可能です。デフォルトグループは/etc/passwdファイルの4番目のフィールドで、特定の形式を持ちます。

username:*:userid:groupid:gecos:homedir:shell

4番目のフィールドでは整数のリストは許可されません。

セカンダリグループの割り当ては /etc/group にあります。ここでは、複数のグループのユーザーを一覧表示できます。

答え3

ユーザーは複数の基本グループを持つことはできません。なぜ?データへのアクセスに使用される API は、passwdデータを 1 つの基本グループに制限するためです。バラより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_t、、、、およびはuid_t整数型でなければなりません。gid_tid_t

したがって、標準ではデフォルトのグループIDを単一の整数に制限します。

答え4

初期のUnixでは、ユーザーは1つのグループにのみ属し、ファイル/etc/passwdに登録されました。これは、1人のユーザーと1つのグループの権限で実行されるプロセスで発生し、そのエントリはログイン時に実行されるシェルを提供します。

後で、ユーザーは別のグループに属することができます(グループごとのアクセス権を取得するため)。グループを変更するコマンドがあります。chgrp(1)これはデフォルトで新しいユーザー+グループで新しいシェルを起動します。このファイルには、/etc/groupユーザーが属するグループ(および該当する場合はそのグループに対して変更するパスワード)がリストされています。レコードの基本グループは/etc/passwd次のとおりです。基本的なグループ。

最新のUnixシステムには、ユーザー/パスワードデータを登録するためのさまざまなデータベースがあります。これについては引き続き説明します/etc/passwd/etc/groupしかし、単純化のために、今日は詳細は特定の構成によって異なります。これらのファイルの形式は1980年代以降ほとんど変更されておらず、フィールドの一般的な意味は変わりませんでした。ユーザーデータにアクセスするためのUnix APIは、依然としてこれらのファイルのレイアウトによって異なります。

後で、プロセスは同時に複数のグループに属することができます。したがって、ログインシェルから開始されたユーザープロセスは同時に複数のグループに属し、そのグループからユーザーが属することができるすべてのグループを取得します/etc/group

以前の議論では、現代のUnixシステムでは、ユーザーは(従来のファイル形式のために)1つのプライマリグループにのみ属することができますが、プライマリグループとセカンダリグループの間の区別はほとんどなくなりました。

関連情報