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_t
uid_t
size_t
<sys/types.h>
。
そしてページからtypes.h
:
nlink_t
、、、、およびはuid_t
整数型でなければなりません。gid_t
id_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つのプライマリグループにのみ属することができますが、プライマリグループとセカンダリグループの間の区別はほとんどなくなりました。