web-dev-qa-db-ja.com

/ etc / passwdはグループ内のユーザーを表示しますが、/ etc / groupは表示しません

ユーザーアカウント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_sendersfilesender_1のプライマリグループであることを知っています。

これは意外な不一致ですか、それとも/ etc/groupがグループがセカンダリであるメンバーのみをリストするのが普通ですか?

6

はい、この不一致は正常です。 /etc/passwdファイルと/etc/groupファイルの表示をやめ、代わりにグループメンバーシップの表示方法を調べ始めました。getent group <groupname>groups <username>

10
John

はい、プライマリグループと補足グループには違いがあります。プライマリグループは、/etc/passwdに示されているメインのグループであり、ユーザーはログイン時にこのグループに属します。ユーザーが補足グループに所属する場合、そのユーザー名が/etc/groupのグループエントリに追加されます。 id -a <user>を使用すると、プライマリグループと補足グループが表示されます。補助グループはリソースへのアクセスを提供しますが、新しいファイルはすべてプライマリグループで作成されます。

newgrpコマンドを使用して、現在アクティブなユーザーのプライマリグループを変更できます。

ユーザーがプライマリグループをセカンダリグループにする必要はありません。ユーザーが所属できるセカンダリグループの数を減らすだけです。従来、ユーザーは32のセカンダリグループに制限されていましたが、近年変更されている可能性があります。

usermodは、1つのコマンドでユーザーのプライマリグループと補足グループを設定できます。 puppetなどの構成管理ツールを使用すると、さまざまな種類のUNIXで必要な特定のコマンドについて心配することなく、それを行うことができます。

9
lsd

membersと呼ばれるプログラムが存在します。これは、ほとんどのLinuxディストリビューションにインストールできます。これは、グループの実際のメンバーがプライマリグループまたは補足グループであるかどうかをリストします。

通常、-gまたは--gidを使用してグループを指定せずにユーザーを作成すると、デフォルトの動作では、プライマリグループがユーザー名として設定され、このgidは/ etc/groupファイルに配置されません。したがって、ユーザーjoeによって作成されたファイルとディレクトリの所有権はjoe:joeになります。しかし、/ etc/groupファイルにグループ 'joe'はありません。

ユーザーjoeをグループ「students」に追加すると、次のコマンドを実行します。

getent group students

グループ内のユーザーのリストにjoeが表示されますstudents

プログラムを実行する

members <groupname>

グループでgroupnameのプライマリまたは補足メンバーであるユーザーを表示します。

1
DJ Far

一般に、システム管理者は、システムコールのgetpwent()ファミリが呼び出されると重複を削除するため、/ etc/groupのプライマリグループのメンバーリストにユーザーを追加する必要があります。プログラムは/ etc/groupまたは/ etc/passwdを直接読み取ることを想定しておらず、システムコールを使用することになっています。これはすべて、少なくとも20年間真実であり、おそらくもっと長い間です。

0
Medievalist