LinuxのいろいろなID

Posted on
この記事は、最終更新日から 8 年以上経過しています。 情報が古い可能性があります。

LinuxのいろいろなIDについてまとめてみますー。

Group ID(GID) - 全てのグループがGIDを持っています。全てのユーザは少なくとも1つのグループに所属する必要があります。ユーザの所属するメインのグループは/etc/passwdで定義され、それ以外のグループは/etc/groupに記載されます。

Process ID(PID) - 全てのプロセス(デーモンも、GUIプロセスも、カーネルも)はプロセスIDを持っています。カーネルは常にPIDが0で、initプロセス(あるいはそれに類するプロセス)がPID 1になります。プロセスが停止すると、PIDは開放され、他のプロセスが同じIDを使えるようになります。

Thread ID(TID) - 全てのプロセスがIDを持つのと同じように、全てのスレッドもIDを持ちます。

Parent Process ID(PPID) - 全てのプロセスは、親プロセスのPIDと同じ番号を、PPIDとして持ちます。PPIDは、そのプロセスがどの親プロセスから起動されたか特定するのに役立ちます。

User ID(UID) - 全てのユーザはUIDを持っています。rootユーザのUIDは常に0です。UIDは/etc/passwdに格納されています。

Effective User ID(EUID) - プロセスやユーザが何かオブジェクトにアクセスしたり、作成しようとした時、カーネルは、そのプロセスやユーザがアクションに必要な権限を持っているか、EUIDでチェックします。殆どの場合、EUIDはUIDと同じですが、異なる場合があります。一般ユーザがrootユーザの権限が必要なコマンドを実行しようとした時、(許されていれば、)特別な関数(「sudo」など)を使ってユーザの権限を一時的に、昇格させることができます。ユーザは、ログイン中にUIDを変えることはできませんが、EUIDを変えることはできるのです(許されていれば)。

UIDはユーザやプロセスを特定させるIDで、EUIDは、権限を特定させるIDです。つまり、UID 0は、rootユーザのことで、EUID 0はrootユーザの権限のことです。ちなみに(なんと)、whoamiコマンドで表示されているのは、UIDに紐づくユーザ名ではなく、EUIDに紐づくユーザ名です。

Real User ID(RUID) - リアルユーザIDはEUIDに似ていますが、プロセスへのシグナル送信などに関係しています。例えば、プロセスは、同じRUIDを持つ他のプロセスにのみ、シグナルを送ることができます。ユーザがプログラムを起動した時は、プログラムはユーザと同じRUIDを持ちます。RUIDはUIDと同じ値になるので、リアルユーザIDをと名付けられています。RUIDは変更できません。

EUIDを、権限を持っているユーザのIDに変更する必要がある場合、RUIDからその情報を取得することがあります。

Saved/Set User ID(SUID) - EUIDはRUIDを参照して、一時的に権限を変更することができます。プロセスがたびたび権限を必要とする場合、いちいちRUIDを参照して、権限を変更するのは効率がよくありません。そこで、EUIDはSUIDにIDを保存しておき、後で戻れるようにしておくことができます。デフォルトでは、SUIDはEUIDと同じ値になっていますが、あらかじめSUIDに、別のIDを設定しておくこともできます。

注釈) Saved User IDとSet User IDは同じものです。

Real Group ID(RGID) - リアルグループIDは、役割はリアルユーザIDと同じですが、対象がユーザではなく、グループになります。

Effective Group ID(EGID) - EGIDも役割はEUIDと同じで、対象がユーザではなく、グループです。

Saved/Set Group ID(SGID) - SGIDも役割は・・・(略)

Session ID(SID) - セッションIDはコミュニケーションの目的で、認証されたプロセス同士のみが特定のセッションだけで会話するのに使用できます。これは、ウイルスなどがデータのやりとりを盗むのを防ぐのに役立ちます。この「会話」でやりとりできるのは、この会話のためのセッションIDを持ったプロセスだけです。セッションIDは主に、HTTPセッションで利用されます。

Process Group ID(PGID) - プロセスグループIDは、同じグループにまとめられたプロセスたちに与えられるIDです。PGIDは、システムコールのsetsid()を使ってグループを生成・宣言したプロセスのPIDと同じになります。PGIDはグループの一種ですが、GIDの用にファイル(/etc/passwd, /etc/group)で定義・表現はされません。プロセスグループはグループ内のプロセス間のコミュニケーションに必要です。プロセスグループは競合状態や、危険なコミュニケーションによる他の障害なども防ぎます。

File System User ID(FSUID) - ファイルシステムの操作をファイルやディレクトリなどに行うときは、EUIDよりFSUIDが使用されます。FSUIDはファイル自身(のパーミッションなど)を変更するのに必要になります。

Universally Unique ID(UUID) - UUIDはさまざまな用途に使われる16バイトの数です。例えば、ストレージのユニットのUUIDや、MACアドレスのUUIDとして見たことがあるかもしれません。UUIDは、(ユーザやプログラマーによって書き換えられないかぎり)恒久的で、汎用的な、一意の値を与えるのに必要です。UUIDを生成したいときは、以下のコマンドが便利です。 cat /proc/sys/kernel/random/uuid

Partition ID - 異なるファイルシステムタイプは、それぞれIDを持っています。このIDはファイルシステムをフォーマットする際に、よく使用されます。例えば、swapパーミッションはpartition ID 82です。しかし全てのファイルシステムが一意のIDを使っているわけではありません。ext4やxfsなどは83です。

USB ID - 異なるUSBデバイスもIDを持っています。そのリストはこちらです。(PCIデバイスなど)他のタイプのハードウェアもそれぞれのIDを持っていますが、それは、それぞれをずらーとここに書いても退屈なので、、ここでは、カッツアイさせていただきます。


参照:Linux IDs