ウェブサイト検索

Linuxでグループ内の全ユーザーをリストする方法


Linuxでは、ファイルには3つの権限セットがあります。一つのセットはファイルのグループ用です。ファイルをグループに割り当てる前に、そのグループのメンバーが誰であるかを確認したいかもしれません。

ファイルおよびディレクトリの権限

Linuxのファイルとディレクトリには、所有者用のパーミッションのセット、ファイルが割り当てられているグループ用の別のセット、そして前の2つのカテゴリーのいずれにも属していないすべての人のためのパーミッションがあります。

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

cd

ディレクトリに。

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

例えば、あなたは開発者チーム、ドキュメンテーションチーム、研究チームなどを持っているかもしれません。それぞれのチームのメンバーは、コラボレーションを助けるために適切に名付けられたグループに追加できます。ユーザーは同時に多くのグループに所属することができます。

それはシンプルですが堅牢な仕組みです。しかし、あなたのファイルが機密である場合は、作業を共有する前にグループのメンバーが誰であるかを確認した方が安心できるかもしれません。これを行う方法はいくつかあります。しかし、注意が必要です。最も頻繁に推奨される2つの方法には問題があります。

/etc/groupsファイル

/etc/groupファイルにはコロンが含まれています

:

"グループとグループメンバーの区切りリスト。各行には4つのフィールドがあります。"

  • 名前: グループのユニークな名前。
  • パスワード: 使用されていません。これは常に「x」で保持されます。
  • グループID: ユニークなグループ識別子です。
  • ユーザー: グループのメンバーのカンマ区切りのリスト。リストは通常、システムおよびデーモンアカウントの場合は空です。

ファイルの内容をターミナルウィンドウにダンプするには、次のコマンドを使用できます。

cat

, しかし、lessを使ってファイルの内容をスクロールできる方が便利です。

less /etc/group

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

特定のユーザーが所属しているグループを調べる場合は、grepを使用して、そのユーザーアカウント名を含むエントリを検索できます。しかし、これは私たちの目的ではありません。我々が求めているのは、一人のユーザーが所属するグループではなく、グループのメンバー全員を見ることです。しかし、見ることは私たちにとって有益です。

grep "dave" /etc/group

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

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

問題は、ユーザーがプライマリグループのメンバーとしてリストされていないことです。だからこそ、「dave」というグループはメンバーを表示していないのです。実際にはユーザー「dave」はそのグループのメンバーです。

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

第二の問題は、「/etc/group」ファイルが単一の真実の源ではないことです。現代のLinuxインストールでは、ユーザーとグループの情報を「/etc/passwd」と「/etc/group」以上の場所に保存することがよくあります。特に、Lightweight Directory Access Protocolのようなサービスが導入されている企業環境ではそうです。一つの場所だけを見ていると、全体像を見逃すかもしれません。

私たちのテストシナリオでは、開発部門のために4つのグループを作成しました。それらは次の通りです:

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

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

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

grep "^devteam" /etc/group

これはファイルから「devteam」エントリを抽出し、すべてのグループメンバーをリストします。そうではないのでしょうか?

getentコマンド

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

getent group

getentをgroupオプションで使用すると、このテストマシンでは/etc/groupファイルを使用した場合と同じ結果が得られます。これは、LDAPやその他の中央管理型のネーミングサービスを使用していないためです。そのため、getentが参照する他のソースはありません。

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

getent コマンドは、私たちのために単一のグループを見ることができます。私たちは「devteam」グループを見てみましょう。

getent group devteam

私たちは以前と全く同じ結果を得ています。しかし、もっと深く掘り下げる方法があります。

蓋コマンド

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

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

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

sudo apt install libuser

Manjaroでは、libuserはAURからインストールされるので、お好きなAURヘルパーを使用する必要があります。私たちはyayを使いました。

yay libuser

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

sudo libuser-lib dave

グループのメンバーを見るには、-g(グループ)オプションをグループ名とともに使用してください。

sudo libuser-lid -g devteam

なんと、ユーザー「francis」がリストのメンバーとして現れました。彼を見るのは初めてです。彼は「/etc/group」にはリストされていなく、getentでも発見されませんでした。

いくつかのユーザーをgroupsコマンドで見てみましょう。

groups abigail
groups hayden
groups francis

  • ユーザー「abigail」は「abigail」というグループと、他に「resteam」と「devteam」の2つのグループにいます。
  • ユーザー「hayden」は「hayden」というグループに所属しており、他に「pvqteam」と「docteam」という2つのグループにも参加しています。
  • ユーザー「francis」は「devteam」という1つのグループに所属しています。「francis」という名前のグループには所属していないのが注目すべき点です。

すべてのユーザーはプライマリグループのメンバーでなければならないことを知っており、デフォルトではプライマリグループにはユーザーのUIDとアカウント名に一致するGIDと名前があります。「francis」というユーザーには何か違った点があるようです。

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

id abigail
id francis

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

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

どちらのものであったにせよ、libuser-lid のみがそれらを検出し、"devteam" グループへの存在を報告しました。

細部に悪魔が隠れている

それで、本物の詳細を見ることが重要です。

グループは協力を構築する素晴らしい方法です。ただし、誰と一緒にそれを開くかを知っている限りにおいてです。

関連記事: