ユーザー識別子
ユーザー識別子(ユーザーしきべつし、英語: user identifier)とは、Unix系システムでユーザーを表現(識別)する番号。UIDと略記される。
また、ユーザーはグループに属することができ、グループを識別するグループ識別子(Group Identifier)という番号がある。これをGIDと略記する。
ユーザー識別子
編集UIDの値の範囲はシステムによって異なるが、最低でも 0 から 32767 の値をとる。また、次のような制限がある。
- スーパーユーザーのUIDは常にゼロ(0)である。
- "nobody" というユーザーは伝統的に最大UID 32767 に設定されてきた。最近では、nobody の UID をシステム範囲(1-100)か 65530-65535 に設定することが多い。
- 1-100 の UID はシステム用途に確保されている。システムによっては 499 まで(Red Hat Enterprise Linux 6以前)、999 まで(Debian、RHEL7以降)をシステム用途に予約することを推奨していることもある[1]。
ユーザー毎のUID値は /etc/passwd ファイルで参照される。シャドウパスワードファイルやネットワーク・インフォメーション・サービス (NIS) も数値としてのUIDを参照する。ユーザー識別子はUNIXのファイルシステムやプロセスに(所有者を示す情報として)必須の情報である。OSによっては 16ビットのUIDをサポートして 65535 までの番号を使えるが、最近の 32ビット UID をサポートするシステムでは 4,294,967,295 (232-1) までの値を使用できる。
POSIX準拠環境では、id
コマンドでユーザー識別子だけでなくユーザー名、一次グループとそのGIDといったアカウントに関する情報を表示することができる。
プロセスは、いくつかのUID(とGID)を持っており、それらを状況によって使い分けている。
- 実効UID (effective UID)
- 実効UID (
euid
) と実効GID (egid
) はファイル作成とファイルアクセスに影響する。ファイル作成時、カーネルはそのファイルの所有者を作成しているプロセスの実効UIDと実効GIDで設定する。ファイルアクセス時、カーネルはプロセスの実効UIDと実効GIDでアクセス権の有無を判断する。 - 保存UID (saved UID)
- 保存UID (
suid
) は、特権を高めて動作中のプログラムが一時的に非特権的な仕事をする際に使用する。実効UIDが特権のある値(通常は root)だったものを非特権的な値に変更する際、以前の特権的なUIDを保存UIDのスロットにコピーする。特権状態を元に戻すとき、保存UIDの値を実効UIDに戻す(非特権的プロセスが実効UIDとして設定できるのは、実UID、保存UID、実効UID - つまり変更しない - の3種類しかない)。 - ファイルシステムUID (file system UID)
- ファイルシステムUID (
fsuid
) はLinuxカーネル特有のユーザー識別子で、ファイルシステムのアクセス制御に使われる。その値は明示的に設定しない限り実効UIDと同じである。実UID、保存UID、実効UIDのいずれかが root の場合のみ root に設定できる。実効UIDを変更すると、その変更はファイルシステムUIDにも伝播する。NFSサーバのように、ファイルシステムに対するアクセス権を得たいが実UIDや実効UIDを変更したくない場合に使用する。 - 実UID (real UID)
- 実UID (
ruid
) と実GID (rgid
) はプロセスの実際の所有者を示し、シグナル送信の権限に影響する。スーパーユーザー特権を持たないプロセスは、送信側と受信側の実UIDが一致する場合のみシグナルを送受信可能である。子プロセスは一般に親プロセスからその値を継承するので、互いにシグナルを送受信可能である。
グループ識別子
編集UNIX系システムでは、複数のユーザーを「グループ」に分類することができる。POSIXやUNIX系のファイルパーミッションは3段階(ユーザー、グループ、その他)から構成されている。グループを用いることにより、ディスクやプリンターなどの周辺機器へのアクセスを正式な形で委任することが可能となる。同様の手法でスーパーユーザーが管理タスクを一般ユーザーに委任することも可能にする。これは、Windows NTやその後継OSでの Administrators グループに似ている。
グループ識別子(Group Identifier)はグループを識別する番号である。GIDの値の範囲はシステムによって異なるが、最低でも 0 から 32767 の値をとる。また、以下のような制限がある。
- スーパーユーザーのログイングループは常に GID 0 である。
この数値は /etc/passwd と /etc/group (あるいはそれと同等のファイル)で参照される。シャドーパスワードファイルとNISも数値としてのGIDを参照する。グループ識別子はUNIXのファイルシステムやプロセスに(所有者を示す情報として)必須の情報である。
使用可能なグループ識別子の値の範囲は、それを格納するメモリ領域のサイズに規定される。従来、16ビットの符号付整数が使われていた。符号は必要ない(負の整数はGIDとして使用されない)ため、符号なしの整数が使われるようになっていった(0~65535)。最近のOSでは32ビットの整数が使われているため、その範囲は 0~4,294,967,295 である。
一次GID と 補助GID
編集UNIXシステムでは、各ユーザーは少なくとも1つのグループに属し、そのグループは /etc/passwd内のそのユーザーのエントリ内にGIDの数値で指定される。これを一次グループID(primary group ID)と呼ぶ。ユーザーはそれ以外のグループにも属することができ、/etc/group ファイルでそれを設定する。そのようなグループのIDを補助グループID(supplementary group ID)とか二次グループID(secondary group ID)と呼ぶ。通常、補助グループIDに属しているだけではグループのパーミッションのアクセス権を獲得できない。
実効グループIDと実グループID
編集UNIXプロセスは実効GIDと実GIDを持つ。通常これらは同一であるが、setgidプロセスでは異なったGIDとなる。setgidプロセスは特権を持つグループとなって特権の必要な機能を実行し、必要に応じて簡単に非特権グループに戻すことが出来る。
脚注
編集- ^ “4.3. コマンドラインツールの使用”. Red Hat Customer Portal. RHEL7 システム管理者のガイド. Red Hat. 2020年11月6日閲覧。