ユーザーアカウントfilesender_1がグループvalid_sendersのメンバーであることを確認したい。
/ etc/groupを見ると、filesender_1がありません:
valid_senders:x:12345:production_1
「production_1は、valid_sendersグループの唯一のメンバーであり、グループIDは12345です。」と読みました。
しかしながら:
/ etc/passwdを見ると、valid_sendersのグループIDがfilesender_1にリストされています...
filesender_1:x:1515:12345:filesender_1:/local/home/filesender_1:/bin/sh
... valid_sendersがfilesender_1のプライマリグループであることを知っています。
これは意外な不一致ですか、それとも/ etc/groupがグループがセカンダリであるメンバーのみをリストするのが普通ですか?
はい、この不一致は正常です。 /etc/passwd
ファイルと/etc/group
ファイルの表示をやめ、代わりにグループメンバーシップの表示方法を調べ始めました。getent group <groupname>
とgroups <username>
。
はい、プライマリグループと補足グループには違いがあります。プライマリグループは、/etc/passwd
に示されているメインのグループであり、ユーザーはログイン時にこのグループに属します。ユーザーが補足グループに所属する場合、そのユーザー名が/etc/group
のグループエントリに追加されます。 id -a <user>
を使用すると、プライマリグループと補足グループが表示されます。補助グループはリソースへのアクセスを提供しますが、新しいファイルはすべてプライマリグループで作成されます。
newgrp
コマンドを使用して、現在アクティブなユーザーのプライマリグループを変更できます。
ユーザーがプライマリグループをセカンダリグループにする必要はありません。ユーザーが所属できるセカンダリグループの数を減らすだけです。従来、ユーザーは32のセカンダリグループに制限されていましたが、近年変更されている可能性があります。
usermod
は、1つのコマンドでユーザーのプライマリグループと補足グループを設定できます。 puppetなどの構成管理ツールを使用すると、さまざまな種類のUNIXで必要な特定のコマンドについて心配することなく、それを行うことができます。
membersと呼ばれるプログラムが存在します。これは、ほとんどのLinuxディストリビューションにインストールできます。これは、グループの実際のメンバーがプライマリグループまたは補足グループであるかどうかをリストします。
通常、-gまたは--gidを使用してグループを指定せずにユーザーを作成すると、デフォルトの動作では、プライマリグループがユーザー名として設定され、このgidは/ etc/groupファイルに配置されません。したがって、ユーザーjoeによって作成されたファイルとディレクトリの所有権はjoe:joeになります。しかし、/ etc/groupファイルにグループ 'joe'はありません。
ユーザーjoeをグループ「students」に追加すると、次のコマンドを実行します。
getent group students
グループ内のユーザーのリストにjoeが表示されますstudents。
プログラムを実行する
members <groupname>
グループでgroupnameのプライマリまたは補足メンバーであるユーザーを表示します。
一般に、システム管理者は、システムコールのgetpwent()ファミリが呼び出されると重複を削除するため、/ etc/groupのプライマリグループのメンバーリストにユーザーを追加する必要があります。プログラムは/ etc/groupまたは/ etc/passwdを直接読み取ることを想定しておらず、システムコールを使用することになっています。これはすべて、少なくとも20年間真実であり、おそらくもっと長い間です。