Linux でグループ内のすべてのユーザーを一覧表示する方法
公開: 2022-08-29Linux では、ファイルには 3 セットの権限があります。 1 つのセットは、ファイルのグループ用です。 ファイルをグループに割り当てる前に、グループのメンバーを確認することができます。
ファイルとディレクトリのアクセス許可
Linux のファイルとディレクトリには、所有者用の一連のアクセス許可、ファイルが割り当てられているグループ用の別のセット、および前の 2 つのカテゴリのいずれにも属さないすべてのユーザー用のアクセス許可があります。
アクセス許可の各セットは、そのカテゴリのメンバーがファイルを読み取り、書き込み、または実行できるかどうかを定義します。 ディレクトリの場合、実行アクションはディレクトリにcd
できることと同じです。
ファイルまたはディレクトリのデフォルト グループは、所有者のデフォルト グループです。 それは通常、それを作成した人です。 グループ権限は、ユーザーのコレクションがそのグループの他のメンバーのファイルとディレクトリへのアクセスを制御できるようにするために使用されます。
たとえば、開発者チーム、ドキュメンテーション チーム、調査チームなどがあるとします。 各チームのメンバーは、コラボレーションを支援するために、適切な名前のグループに追加できます。 ユーザーは一度に多くのグループに所属できます。
これはシンプルですが堅牢なスキームです。 ただし、ファイルが機密性の高いものである場合は、作業を共有する前に、グループのメンバーが誰であるかを確認したほうがよい場合があります。 これにはさまざまな方法があります。 しかし、注意してください。 最も頻繁に推奨される 2 つの方法には問題があります。
関連: Linux で chgrp コマンドを使用する方法
/etc/groups ファイル
「/etc/group」ファイルには、コロン「 :
」で区切られたグループとグループ メンバーのリストが含まれています。 各行には 4 つのフィールドがあります。
- Name : グループの一意の名前。
- パスワード: 使用しません。 これは常に「x」を保持します。
- グループ ID : 一意のグループ ID。
- Users : グループのメンバーのカンマ区切りのリスト。 通常、システム アカウントとデーモン アカウントのリストは空です。
ファイルの内容を端末ウィンドウにダンプするには、 cat
を使用できますが、ファイルの内容をスクロールできる方がless
で便利です。
以下 /etc/group
「adm」グループには 2 つ、「cdrom」グループには 1 つのメンバーがありますが、リストの上部にあるほとんどのエントリにはメンバーがありません。
特定のユーザーが属しているグループを見つけたい場合は、 grep
を使用して、そのユーザー アカウント名でエントリを検索できます。 これは私たちの仕事ではありません。 1 人が所属しているグループではなく、グループのメンバーであるすべての人を見たいのです。 しかし、私たちが見てみるのは有益です。
grep "デイブ" /etc/group
文字列「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」ファイルが認識しているのと同じ数のメンバー。
単一のグループを抽出したい場合は、 grep
を使用して検索できます。 キャレット「 ^
」は行頭を表します。
grep "^devteam" /etc/group
これにより、ファイルから「devteam」エントリが抽出され、すべてのグループ メンバーが一覧表示されます。 それともそうですか?
getent コマンド
getent
コマンドは、「/etc/group」だけでなく、複数のデータベースでユーザー グループ情報をチェックします。 getent
を使用して、ユーザー グループを表示します。
取得グループ
group
オプションを指定してgetent
を使用すると、このテスト マシンでは、「/etc/group」ファイルを使用した場合と同じ結果が得られます。 これは、LDAP やその他の集中型ネーム サービスを使用していないためです。 そのため、 getent
が参照できる他の情報源はありません。
結果が「/etc/group」ファイルの結果と一致するのは当然のことです。 おそらく、私たちが実際に見ているのは、状況の現実です。 おそらく、すべてが単純で、このコンピューターでは、見たままの結果が得られるのではないでしょうか? それについては判断を留保しましょう。
getent
コマンドは、1 つのグループを調べることができます。 「devteam」グループを見ていきます。
getent グループ devteam
以前とまったく同じ結果が得られます。 ただし、深く掘り下げる方法はあります。
関連: Linux でユーザーを一覧表示する方法
ふたコマンド
lid
コマンドはlibuser
コレクションのツールの一部です。 Fedora 36 テスト コンピューターには既にインストールされていますが、Ubuntu 22.04 および Manjaro 21 にはインストールする必要がありました。
また、コマンドは Fedora と Manjaro ではlid
と呼ばれますが、Ubuntu ではlibuser-lid
を使用する必要があります。
コマンドを Ubuntu にインストールするには、次のように入力します。
sudo apt install libuser
Manjaro では、AUR からlibuser
がインストールされるため、お気に入りの AUR ヘルパーを使用する必要があります。 yay
を使用しました。
イェーイ・リユーザー
libuser-lid
を使用して、グループまたはユーザーに関するグループ情報を表示できます。 個人が属しているグループを表示するには、コマンド ラインでユーザー アカウント名を渡します。 Fedora と Manjaro では、 libuser-lid
の代わりにlid
を使用することを忘れないでください。
sudo libuser-lib デイブ
グループのメンバーを表示するには、グループの名前とともに-g
(グループ) オプションを使用します。
sudo libuser-lid -g devteam
なんと、「francis」というユーザーがリストのメンバーとして登場しました。 私たちが彼に会ったのはこれが初めてです。 彼は「/etc/group」にリストされておらず、 getent
も彼を発見できませんでした。
groups
コマンドを使用して数人のユーザーを見てみましょう。
グループアビゲイル
グループヘイデン
グループフランシス
- ユーザー「abigail」は、「abigail」というグループと、他の 2 つのグループ「resteam」と「devteam」に所属しています。
- ユーザー「hayden」は、「hayden」というグループと、「pvqteam」および「docteam」という 2 つのグループに属しています。
- ユーザー「francis」は、「devteam」グループという 1 つのグループに所属しています。 彼らが「フランシス」という名前のグループに属していないことは注目に値します。
すべてのユーザーは一次グループのメンバーでなければならず、デフォルトで一次グループにはユーザーの UID とアカウント名と一致する GID と名前があることがわかっています。 ユーザー「francis」については何か違うように見えます。
id
コマンドを使用して、UID と GID が何を示しているかを見てみましょう。
idアビゲイル
イド・フランシス
ユーザー「abigail」の UID は 1002、GID は 1002 です。ユーザーは 3 つのグループに属し、そのうちの 1 つが「abigail」と呼ばれます。 GID は 1002 です。これがデフォルトのプライマリ グループです。
ユーザー「francis」の GID は 1019 で、これは「devteam」グループの GID と一致します。 このユーザーには新しいプライマリ グループが割り当てられているか、このユーザーがシステムに追加されたときに「devteam」グループがプライマリ グループとして設定されています。
いずれにせよ、 libuser-lid
だけがそれらを検出し、「devteam」グループでの存在を報告しました。
悪魔は細部に宿る
したがって、本物の詳細を見ることが重要です。
グループは、誰と開始するかを知っている限り、コラボレーションを設定するための優れた方法です。
関連: Linux で chfn と usermod を使用してユーザー データを変更する方法