Linuxでユーザーの所属グループを確認するコマンド|id・groups・getentの使い分け


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)LinuxtipsLinuxtips, ユーザー管理 > Linuxでユーザーの所属グループを確認するコマンド|id・groups・getentの使い分け
「このユーザー、どのグループに入ってるんだっけ?」
「プライマリグループとセカンダリグループって何が違うの?」

Linuxでファイルのアクセス権やサービスの実行権限を正しく管理するには、ユーザーがどのグループに所属しているかを正確に把握する必要があります。

この記事では、id・groups・getentコマンドを使ってグループを確認する方法から、/etc/passwd・/etc/groupファイルの読み方、プライマリグループとセカンダリグループの違い、さらにはグループの追加・変更手順まで、現場で必要な知識を網羅的に解説します。

プライマリグループとセカンダリグループの違い

Linuxのユーザーは、必ず1つの「プライマリグループ(主グループ)」に所属しています。ユーザーがファイルやディレクトリを作成すると、そのファイルのグループ所有者はプライマリグループになります。

一方、「セカンダリグループ(補助グループ)」は、追加で所属できるグループです。1人のユーザーが複数のセカンダリグループに所属できます。

プライマリグループ:ユーザーに必ず1つ割り当てられるグループ。ファイル作成時のグループ所有者になる
セカンダリグループ:追加で所属できるグループ。共有ディレクトリへのアクセス制御などに使う

たとえば、開発チーム用の共有ディレクトリに複数のユーザーがアクセスできるようにしたい場合、セカンダリグループとして「developers」を作り、そこに各ユーザーを追加する、という使い方をします。

idコマンドでグループを確認する(最も使う方法)

現場でグループを確認するとき、最もよく使うのがidコマンドです。UID(ユーザーID)、GID(プライマリグループID)、所属グループの一覧をまとめて表示してくれます。

1. 特定ユーザーのグループを確認する

idコマンドの引数にユーザー名を指定します。

$ id user1 uid=1002(user1) gid=1003(user1) groups=1003(user1),10(wheel),1010(developers)

この出力の意味は以下のとおりです。

uid=1002(user1):ユーザーIDが1002、ユーザー名がuser1
gid=1003(user1):プライマリグループIDが1003、グループ名がuser1
groups=1003(user1),10(wheel),1010(developers):所属グループの一覧(プライマリ+セカンダリ)

2. 自分自身のグループを確認する

引数なしでidコマンドを実行すると、現在ログイン中のユーザー自身の情報が表示されます。

$ id uid=1002(user1) gid=1003(user1) groups=1003(user1),10(wheel),1010(developers)

3. グループ名だけを表示する(-Gnオプション)

グループ名の一覧だけを取得したい場合は、-Gnオプションを使います。

$ id -Gn user1 user1 wheel developers

スクリプトでグループ名を取得したいときに便利です。

4. プライマリグループだけを表示する(-gnオプション)

プライマリグループの名前だけを確認したい場合は、-gnオプションを使います。

$ id -gn user1 user1

groupsコマンドでグループを確認する

groupsコマンドは、ユーザーが所属しているグループ名をシンプルに表示します。idコマンドよりも出力がコンパクトで、グループ名だけをすばやく確認したいときに使います。

$ groups user1 user1 : user1 wheel developers

引数を省略すると、自分自身の所属グループが表示されます。

$ groups user1 wheel developers

/etc/passwdと/etc/groupファイルから確認する

idコマンドやgroupsコマンドが使えない環境や、GID(グループID番号)を直接確認したい場合は、設定ファイルを直接参照します。

1. /etc/passwdでプライマリグループのGIDを確認する

/etc/passwdファイルの4番目のフィールドがプライマリグループのGIDです。

$ grep user1 /etc/passwd user1:x:1002:1003::/home/user1:/bin/bash

各フィールドの意味は以下のとおりです。

user1:ユーザー名
x:パスワード(/etc/shadowに格納)
1002:UID(ユーザーID)
1003:GID(プライマリグループID)
/home/user1:ホームディレクトリ
/bin/bash:ログインシェル

2. /etc/groupでグループ名とメンバーを確認する

/etc/groupファイルを参照すると、グループに所属しているメンバー一覧がわかります。

$ grep user1 /etc/group user1:x:1003: wheel:x:10:user1 developers:x:1010:user1,user2,user3

/etc/groupの各フィールドの意味は以下のとおりです。

1番目:グループ名
2番目:パスワード(通常はx)
3番目:GID(グループID)
4番目:メンバー一覧(カンマ区切り)

※プライマリグループとして所属しているユーザーは、4番目のメンバー一覧には表示されません。これはよくある混乱ポイントです。

getentコマンドでグループを確認する

getentコマンドは、/etc/groupだけでなくLDAPやNISなどの外部認証データベースも含めてグループ情報を検索できます。ActiveDirectoryと連携している環境では、getentを使わないとグループが表示されない場合があります。

1. 特定のグループの情報を表示する

$ getent group developers developers:x:1010:user1,user2,user3

2. グループの全一覧を表示する

$ getent group root:x:0: bin:x:1: daemon:x:2: wheel:x:10:user1 developers:x:1010:user1,user2,user3 ~省略~

3. 特定ユーザーが所属するグループをgetentで検索する

getentの出力をgrepで絞り込めば、特定ユーザーがセカンダリグループとして所属しているグループを一覧できます。

$ getent group | grep user1 user1:x:1003: wheel:x:10:user1 developers:x:1010:user1,user2,user3

id・groups・getentの使い分け

3つのコマンドにはそれぞれ得意な場面があります。

id:UID・GID・所属グループをまとめて確認したいとき。最も情報量が多く、現場で一番使う
groups:グループ名だけをすばやく確認したいとき。出力がシンプル
getent:LDAP/NIS/ActiveDirectory連携環境でグループを確認するとき。外部認証も含めて検索できる

迷ったらまずidコマンドを使ってください。idコマンドだけで、ほとんどの場面は対応できます。

グループの追加・変更方法

グループの確認ができたら、次はグループの追加や変更の操作も押さえておきましょう。

1. ユーザーをセカンダリグループに追加する(usermod -aG)

既存ユーザーにセカンダリグループを追加するには、usermod -aGコマンドを使います。

# usermod -aG developers user1

【重要】-aオプションを忘れると既存グループが消える

-aオプション(append)を付けないと、そのユーザーのセカンダリグループが指定したグループだけに「上書き」されます。これは現場で本当に起きるミスです。

# 危険な例(-aなし) - 既存のセカンダリグループが全て消える # usermod -G developers user1 # 正しい例(-aGで追加) # usermod -aG developers user1

※usermodコマンドの実行にはroot権限が必要です。一般ユーザーの場合はsudoを付けて実行してください。

2. 新しいグループを作成する(groupadd)

# グループ名を指定して作成 # groupadd developers # GID(グループID)を指定して作成 # groupadd -g 2000 developers

GIDを指定したい場合は-gオプションを使います。複数サーバー間でGIDを統一したいときに使う手法です。

3. プライマリグループを変更する(usermod -g)

# user1のプライマリグループをdevelopersに変更 # usermod -g developers user1 # 変更結果を確認 $ id user1 uid=1002(user1) gid=1010(developers) groups=1010(developers),10(wheel)

プライマリグループを変更すると、そのユーザーが新しく作成するファイルのグループ所有者が変わります。変更する前に、既存ファイルへの影響を確認しておきましょう。

トラブルシュート:よくあるグループ関連のエラーと対処法

「Permission denied」でファイルにアクセスできない

ファイルやディレクトリにアクセスできない場合、まずそのファイルのグループ所有者と自分の所属グループを確認します。

# ファイルのグループ所有者を確認 $ ls -l /var/www/html/index.html -rw-rw-r-- 1 apache webadmin 1024 Mar 1 10:00 /var/www/html/index.html # 自分の所属グループを確認 $ id uid=1002(user1) gid=1003(user1) groups=1003(user1),10(wheel)

この例では、ファイルのグループが「webadmin」ですが、user1は「webadmin」グループに所属していません。対処法は、user1をwebadminグループに追加することです。

# user1をwebadminグループに追加 # usermod -aG webadmin user1

※グループの変更を反映するには、対象ユーザーが一度ログアウトして再ログインする必要があります。

usermod -aGしたのにグループが反映されない

usermod -aGでグループを追加しても、対象ユーザーがログイン中の場合は即座に反映されません。以下の方法で対処してください。

方法1:対象ユーザーがログアウトして再ログインする
方法2:newgrpコマンドで一時的にグループを切り替える

# 一時的にdevelopersグループに切り替える $ newgrp developers # 反映されたか確認 $ id

本記事のまとめ

やりたいこと コマンド
UID・GID・所属グループをまとめて確認 id ユーザー名
グループ名だけ表示 id -Gn ユーザー名
プライマリグループだけ表示 id -gn ユーザー名
所属グループをシンプルに表示 groups ユーザー名
LDAP/NIS環境も含めてグループ検索 getent group グループ名
グループの全一覧を表示 getent group
セカンダリグループに追加 usermod -aG グループ名 ユーザー名
GID指定でグループ作成 groupadd -g GID グループ名
プライマリグループを変更 usermod -g グループ名 ユーザー名

ユーザー・グループ管理をもっと体系的に学びたいですか?

Linuxのユーザー管理は、権限設定やセキュリティの土台になる重要な分野です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

<<関連記事>>
・グループパスワードを削除する
・グループからメンバーを外す
・グループにメンバーを追加する
・グループに管理者を設定する
・グループにパスワードを設定する

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る