【Linux】idコマンドでユーザーの識別番号と所属グループを解析する

目次

概要

Linuxシステムにおいて、実行中のユーザーや指定したユーザーの識別情報(UID, GID)および所属しているすべてのグループ情報を表示するためのコマンドです。

パーミッション関連のトラブルシューティングや、シェルスクリプト内での実行ユーザー判定において、権限の有無を正確に把握するために利用されます。


仕様(引数・オプション)

構文

id [オプション] [ユーザー名]

主なオプション

オプション説明
-u / –user実効ユーザーID(UID)のみを表示します。
-g / –group実効グループID(GID)のみを表示します。
-G / –groups所属しているすべてのグループIDを表示します。
-n / –name数値ではなく名前(ユーザー名やグループ名)を表示します(-u, -g, -G と併用)。
-z / –zero出力の区切り文字を空白ではなく、NULL文字(\0)に変更します。

基本の使い方

システム監査の際に、現在操作を行っているユーザー mori の詳細な識別情報を確認するシナリオです。

BASH

# ユーザー mori のUID、GID、所属グループをすべて表示
id mori

実行結果例

uid=1001(mori) gid=1001(mori) groups=1001(mori),10(wheel),998(docker)

もし存在しないユーザー名を指定した場合、コマンドはエラーを返します。

BASH

# 存在しないユーザー名を指定した場合
id mmoriii

実行結果例

id: ‘mmoriii’: no such user

実践コマンド

実効ユーザーIDとユーザー名の特定

スクリプト内などで、現在の実行者が root(UID: 0)であるか、あるいは特定のユーザー mori であるかを確認するために、IDまたは名前だけを抽出します。

BASH

# 実効ユーザーID(数値)のみを表示
id -u

# ユーザー名(文字列)のみを表示
id -un

所属しているグループ名の解析

数値のGIDではなく、人間が判別しやすいグループ名の一覧を取得します。

BASH

# 所属するすべてのグループ名を名前で表示
id -Gn mori

実行結果例

mori wheel docker

区切り文字をNULLに変更して出力する

多数のグループに所属している場合や、グループ名にスペースが含まれる可能性を考慮し、プログラムで安全に処理するためにNULL文字で区切ります。

BASH

# グループ名をNULL文字区切りで表示
id -Gnz mori

権限昇格時の実効ユーザー確認

sudo を利用してコマンドを実行した際、システムがどのユーザーとして処理を認識しているかを確認します。

BASH

# 通常実行時の実効ユーザー名
id -un

# sudo実行時の実効ユーザー名(rootとして認識される)
sudo id -un

実行結果例

mori
root

注意点

  1. 実効UIDと実UIDの違い通常は同一ですが、SUID(Set User ID)が設定されたプログラムを実行している最中などは、id コマンドの結果に「euid(実効ユーザーID)」が表示されることがあります。権限の判定は実効ユーザーIDに基づいて行われます。
  2. キャッシュの影響LDAPやActive Directoryなどの外部ディレクトリサービスを利用している環境では、グループ情報の変更が即座に反映されない場合があります。その際は、サービスのキャッシュクリアや再ログインが必要です。

まとめ

idコマンドは、システム内での「自分の立ち位置」を明確にするための不可欠なツールです。

特にファイルへのアクセス拒否が発生した際、UIDやGIDの数値がファイル所有者の設定と一致しているかを照合することで、迅速な原因特定が可能になります。名前を表示する -n やNULL区切りの -z といったオプションを適切に組み合わせることで、手動での確認からスクリプトによる自動処理まで幅広く対応できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次