Linux でグループ内のすべてのユーザーを一覧表示する方法

公開: 2022-08-29
bash プロンプトを表示している Linux ラップトップ
Fatmawati achmad zaenuri/Shutterstock.com

Linux では、ファイルには 3 セットの権限があります。 1 つのセットは、ファイルのグループ用です。 ファイルをグループに割り当てる前に、グループのメンバーを確認することができます。

ファイルとディレクトリのアクセス許可

Linux のファイルとディレクトリには、所有者用の一連のアクセス許可、ファイルが割り当てられているグループ用の別のセット、および前の 2 つのカテゴリのいずれにも属さないすべてのユーザー用のアクセス許可があります。

アクセス許可の各セットは、そのカテゴリのメンバーがファイルを読み取り、書き込み、または実行できるかどうかを定義します。 ディレクトリの場合、実行アクションはディレクトリにcdできることと同じです。

ファイルまたはディレクトリのデフォルト グループは、所有者のデフォルト グループです。 それは通常、それを作成した人です。 グループ権限は、ユーザーのコレクションがそのグループの他のメンバーのファイルとディレクトリへのアクセスを制御できるようにするために使用されます。

たとえば、開発者チーム、ドキュメンテーション チーム、調査チームなどがあるとします。 各チームのメンバーは、コラボレーションを支援するために、適切な名前のグループに追加できます。 ユーザーは一度に多くのグループに所属できます。

これはシンプルですが堅牢なスキームです。 ただし、ファイルが機密性の高いものである場合は、作業を共有する前に、グループのメンバーが誰であるかを確認したほうがよい場合があります。 これにはさまざまな方法があります。 しかし、注意してください。 最も頻繁に推奨される 2 つの方法には問題があります。

関連: Linux で chgrp コマンドを使用する方法

/etc/groups ファイル

「/etc/group」ファイルには、コロン「 : 」で区切られたグループとグループ メンバーのリストが含まれています。 各行には 4 つのフィールドがあります。

  • Name : グループの一意の名前。
  • パスワード: 使用しません。 これは常に「x」を保持します。
  • グループ ID : 一意のグループ ID。
  • Users : グループのメンバーのカンマ区切りのリスト。 通常、システム アカウントとデーモン アカウントのリストは空です。

ファイルの内容を端末ウィンドウにダンプするには、 catを使用できますが、ファイルの内容をスクロールできる方がlessで便利です。

 以下 /etc/group 

cat を使用して /etc/group ファイルの内容を表示する

「adm」グループには 2 つ、「cdrom」グループには 1 つのメンバーがありますが、リストの上部にあるほとんどのエントリにはメンバーがありません。

less ファイル ビューアーの /etc/groups ファイルの最初の部分

特定のユーザーが属しているグループを見つけたい場合は、 grepを使用して、そのユーザー アカウント名でエントリを検索できます。 これは私たちの仕事ではありません。 1 人が所属しているグループではなく、グループのメンバーであるすべての人を見たいのです。 しかし、私たちが見てみるのは有益です。

 grep "デイブ" /etc/group 

ユーザー dave がメンバーであるグループのリスト

文字列「dave」を含むエントリがリストされます。 そして、それらの中に隠れているのは、物事が私たちが思っていたほど単純ではないかもしれないという兆候です.

ユーザーが Linux に追加されると、デフォルトのアクションは、ユーザー アカウントと同じ名前のグループにユーザーを配置することです。 これは彼らのプライマリグループです。 それらが追加されるその他のグループは、セカンダリグループと呼ばれます。

問題は、ユーザーがプライマリ グループのメンバーとしてリストされていないことです。 これが、ユーザー「dave」がそのグループのメンバーであるにもかかわらず、グループ「dave」にメンバーが表示されない理由です。

もちろん、システム管理者は、任意のユーザーのプライマリ グループを他のグループのプライマリ グループに変更できます。 つまり、ユーザーは任意のグループのメンバーになることができますが、「/etc/group」ファイルにはそのようにリストされません。 それが 1 つの問題です。

2 つ目の問題は、「/etc/group」ファイルが唯一の信頼できる情報源ではないことです。 最新の Linux インストールでは、特に Lightweight Directory Access Protocol などのサービスが展開されている企業の状況では、「/etc/passwd」や「/etc/group」以外の場所にユーザーとグループの情報を保存することがよくあります。 一か所だけを見ていると、全体像が見えないことがあります。

このテスト シナリオでは、開発部門用に 4 つのグループを作成しました。 彼らです:

  • resteam : 研究チーム。
  • devteam : 開発チーム。
  • pvqteam : 製品検証および品質チーム。
  • docteam : ドキュメンテーション チーム。

これらのチームに人を追加しました。 複数のチームに所属している人もいます。 「/etc/group」ファイルをlessで開き、ファイルの一番下までスクロールすると、新しいグループとグループ メンバーが表示されます。 少なくとも、「/etc/group」ファイルが認識しているのと同じ数のメンバー。

Less File Viewer の /etc/group ファイルの下部

単一のグループを抽出したい場合は、 grepを使用して検索できます。 キャレット「 ^ 」は行頭を表します。

 grep "^devteam" /etc/group 

grep を使用して単一グループのメンバーを抽出する

これにより、ファイルから「devteam」エントリが抽出され、すべてのグループ メンバーが一覧表示されます。 それともそうですか?

getent コマンド

getentコマンドは、「/etc/group」だけでなく、複数のデータベースでユーザー グループ情報をチェックします。 getentを使用して、ユーザー グループを表示します。

 取得グルー​​プ

getent を使用してすべての定義済みグループを一覧表示する

groupオプションを指定してgetentを使用すると、このテスト マシンでは、「/etc/group」ファイルを使用した場合と同じ結果が得られます。 これは、LDAP やその他の集中型ネーム サービスを使用していないためです。 そのため、 getentが参照できる他の情報源はありません。

グループとメンバーを示す getent group からの出力

結果が「/etc/group」ファイルの結果と一致するのは当然のことです。 おそらく、私たちが実際に見ているのは、状況の現実です。 おそらく、すべてが単純で、このコンピューターでは、見たままの結果が得られるのではないでしょうか? それについては判断を留保しましょう。

getentコマンドは、1 つのグループを調べることができます。 「devteam」グループを見ていきます。

 getent グループ devteam 

getent group を使用して単一グループの詳細を抽出する

以前とまったく同じ結果が得られます。 ただし、深く掘り下げる方法はあります。

関連: Linux でユーザーを一覧表示する方法

ふたコマンド

lidコマンドはlibuserコレクションのツールの一部です。 Fedora 36 テスト コンピューターには既にインストールされていますが、Ubuntu 22.04 および Manjaro 21 にはインストールする必要がありました。

また、コマンドは Fedora と Manjaro ではlidと呼ばれますが、Ubuntu ではlibuser-lidを使用する必要があります。

コマンドを Ubuntu にインストールするには、次のように入力します。

 sudo apt install libuser 

Ubuntu への libuser のインストール

Manjaro では、AUR からlibuserがインストールされるため、お気に入りの AUR ヘルパーを使用する必要があります。 yayを使用しました。

 イェーイ・リユーザー

Manjaroにlibuserをインストールする

libuser-lidを使用して、グループまたはユーザーに関するグループ情報を表示できます。 個人が属しているグループを表示するには、コマンド ラインでユーザー アカウント名を渡します。 Fedora と Manjaro では、 libuser-lidの代わりにlidを使用することを忘れないでください。

 sudo libuser-lib デイブ

libuser-lid を使用して、ユーザー dave がメンバーであるグループを表示する

グループのメンバーを表示するには、グループの名前とともに-g (グループ) オプションを使用します。

 sudo libuser-lid -g devteam 

libuser-lid を使用して devteam グループのメンバーを一覧表示する

なんと、「francis」というユーザーがリストのメンバーとして登場しました。 私たちが彼に会ったのはこれが初めてです。 彼は「/etc/group」にリストされておらず、 getentも彼を発見できませんでした。

groupsコマンドを使用して数人のユーザーを見てみましょう。

 グループアビゲイル
グループヘイデン
グループフランシス

選択したユーザーに対して groups コマンドを使用する

  • ユーザー「abigail」は、「abigail」というグループと、他の 2 つのグループ「resteam」と「devteam」に所属しています。
  • ユーザー「hayden」は、「hayden」というグループと、「pvqteam」および「docteam」という 2 つのグループに属しています。
  • ユーザー「francis」は、「devteam」グループという 1 つのグループに所属しています。 彼らが「フランシス」という名前のグループに属していないことは注目に値します。
Linux でユーザーをグループ (または 2 番目のグループ) に追加する
関連Linux でグループ (または 2 番目のグループ) にユーザーを追加する

すべてのユーザーは一次グループのメンバーでなければならず、デフォルトで一次グループにはユーザーの UID とアカウント名と一致する GID と名前があることがわかっています。 ユーザー「francis」については何か違うように見えます。

idコマンドを使用して、UID と GID が何を示しているかを見てみましょう。

 idアビゲイル
イド・フランシス

ユーザー abigail と francis で id コマンドを使用する

ユーザー「abigail」の UID は 1002、GID は 1002 です。ユーザーは 3 つのグループに属し、そのうちの 1 つが「abigail」と呼ばれます。 GID は 1002 です。これがデフォルトのプライマリ グループです。

ユーザー「francis」の GID は 1019 で、これは「devteam」グループの GID と一致します。 このユーザーには新しいプライマリ グループが割り当てられているか、このユーザーがシステムに追加されたときに「devteam」グループがプライマリ グループとして設定されています。

いずれにせよ、 libuser-lidだけがそれらを検出し、「devteam」グループでの存在を報告しました。

悪魔は細部に宿る

したがって、本物の詳細を見ることが重要です。

グループは、誰と開始するかを知っている限り、コラボレーションを設定するための優れた方法です。

関連: Linux で chfn と usermod を使用してユーザー データを変更する方法