Provided by: manpages-ja_0.5.0.0.20161015+dfsg-1_all ![bug](/img/bug.png)
![bug](/img/bug.png)
名前
credentials - 認証に用いられるプロセスの識別子
説明
プロセスID (PID) 各プロセスは、負でない整数の一意な識別子を持つ。 この識別子は fork(2) を使ってプロセスが生成される際に割 り当てられる。 プロセスは getpid(2) を使って自分の PID を取得できる。 PID は pid_t 型で表現される (pid_t は <sys/types.h> で定義されている)。 PID は各種のシステムコールでそのシステムコールが作用するプロセスを 特定するために使用される。以下に例を挙 げる: kill(2), ptrace(2), setpriority(2), setpgid(2), setsid(2), sigqueue(3), waitpid(2). プロセスの PID は execve(2) の前後で不変である。 親プロセス ID (PPID) プロセスの親プロセスの ID は、 fork(2) を使ってそのプロセスを生成したプロセスを示す。 プロセスは getppid(2) を使って自分の PPID を取得できる。 PPID は pid_t 型で表現される。 プロセスの PPID は execve(2) の前後で不変である。 プロセスグループ ID とセッション ID 各プロセスはセッション ID とプロセスグループ ID を持つ。 これらの ID はどちらも pid_t 型で表現される。 プ ロセスは、それぞれ getsid(2), getpgrp(2) を使って自分のセッション ID、プロセスグループ ID を取得できる。 fork(2) で生成された子プロセスは親プロセスのセッション ID とプロセスグループ ID を継承する。プロセスの セッション ID とプロセスグループ ID は execve(2) の前後で不変である。 セッションとプロセスグループの概念は、シェルのジョブ制御を行うために 考案されたものである。 プロセスグ ループ (時には「ジョブ」と呼ばれることもある) は、 同じプロセスグループ ID を共有するプロセスの集まりであ る。 シェルは、一つのコマンドもしくはパイプラインの実行に使われるプロセス群に 対して一つのプロセスグルー プを生成する (例えば、コマンド "ls | wc" を実行するために生成される二つのプロセスは 同じプロセスグループ に置かれる)。 所属するプロセスグループは setpgid(2) を使って設定できる。 自身のプロセス ID がプロセスグ ループ ID と同じプロセスは、 そのグループの「プロセスグループリーダー」である。 セッションは、同じセッション ID を共有するプロセスの集まりである。 ある一つのプロセスグループの全メンバー は同じセッション ID を持つ (つまり、一つのプロセスグループのメンバーは全て同じセッションに所属し、 これに より、セッションとプロセスグループで二階層のプロセス階層が形成できる)。 新たなセッションの生成はプロセス が setsid(2) を呼び出すことで行う。 setsid(2) は、 setsid(2) を呼び出したプロセスの PID と同じ値のセッ ション ID を持つ 新たなセッションを生成する。 セッションの生成者は「セッションリーダー」と呼ばれる。 あるセッションの全プロセスは一つの 制御端末 を共有する。 セッションリーダーが最初に端末をオープンした際に 制御端末は設定される (open(2) の呼び出しで O_NOCTTY フラグが指定された場合を除く)。 一つの端末は、最大で も一つのセッションの制御端末にしかなれない。 一つのセッションのジョブの中で、フォアグラウンドジョブになれるのは最大でも一つで、そのセッションの他の ジョブはバックグラウンドジョブである。 フォアグラウンドジョブだけが端末からの読み込みを行える。 バックグ ラウンドのプロセスが端末から読み込みを行おうとした場合、 フォアグラウンドジョブを停止させるシグナルである SIGTTIN が所属するプロセスグループに対して送信される。 端末に TOSTOP フラグがセットされていた場合 (termios(3) 参照)、 フォアグラウンドジョブだけが端末への書き込みを行える。 バックグラウンドのプロセスが端 末への書き込みを行おうとした場合、 フォアグラウンドジョブを停止させるシグナルである SIGTTOU が生成され る。 シグナルを生成する端末キー (例えば 中断キー、通常は control-C) が押された場合、 そのシグナルはフォア グラウンドジョブのプロセスに送信される。 様々なシステムコールやライブラリ関数で、プロセスグループの全メンバーに対して操作を行うことができる。 例え ば、 kill(2), killpg(2), getpriority(2), setpriority(2), ioprio_get(2), ioprio_set(2), waitid(2), waitpid(2) など。 fcntl(2) の操作 F_GETOWN, F_GETOWN_EX, F_SETOWN, F_SETOWN_EX の議論も参照。 ユーザー ID とグループ ID 各プロセスは、数種類のユーザー ID とグループ ID を持つ。 ユーザー ID、グループ ID は整数で、それぞれ uid_t, gid_t 型で表現される (これらは <sys/types.h> で定義されている)。 Linux では、各プロセスは以下のような種類のユーザー ID とグループ ID を持つ。 * 実ユーザー ID と実グループ ID。 これらの ID によりプロセスの所有者が決定される。 プロセスが自分の実 ユーザー ID、実グループ ID を取得するには、それぞれ getuid(2), getgid(2) を使用する。 * 実効ユーザー ID と実効グループ ID。 これらの ID は、メッセージキュー、共有メモリー、セマフォなどの 共 有リソースにアクセスしようとした際にそのプロセスがアクセス許可を 持っているかをカーネルが判定するのに 使用される。 ほとんどの UNIX システムでは、これらの ID はファイルへのアクセス時の アクセス許可の判定に も使用される。 しかしながら、Linux ではファイルへのアクセス許可の判定には 後述のファイルシステム ID が 使用される。 プロセスが自分の実効ユーザー ID、実効グループ ID を取得するには、それぞれ geteuid(2), getegid(2) を使用する。 * 保存 (saved) set-user-ID と保存 set-group-ID。 これらの ID は、set-user-ID や set-group-ID されたプロ グラムにおいて、 プログラムの実行時に設定された実効 ID のコピーを保存するために 使用される (execve(2) 参照)。 set-user-ID プログラムは、実効ユーザー ID を実ユーザーID と保存 set-user-ID の間で行ったり来た り切り替えることで、特権を得たり落としたりできる。 この切り替えは seteuid(2), setreuid(2), setresuid(2) を呼び出すことで実行できる。 set-group-ID プログラムは、 setegid(2), setregid(2), setresgid(2) を使って同様のことができる。 プロセスが自分の保存 set-user-ID、保存 set-group-ID を取得 するには、 getresuid(2), getresgids(2) をそれぞれ使用する。 * ファイルシステムユーザー ID とファイルシステムグループ ID (Linux 固有)。 これらの ID は、後述の補助グ ループ ID と組み合わせて使用され、 ファイルへのアクセス権の決定に利用される。詳細は path_resolution(7) を参照。 プロセスの実効 ID (ユーザー ID や グループ ID) が変更されるたびに、 カーネルは自動的に対応す るファイルシステム ID を同じ値に変更する。 その結果、ファイルシステム ID は通常は対応する実効 ID と同 じ値となり、 ファイルのアクセス権のチェック方法は Linux と他の UNIX システムで同じである。 ファイルシ ステム ID は実効 ID とは異なる値にすることができ、 変更は setfsuid(2) と setfsgid(2) を呼び出して行 う。 * 補助グループ ID。 この ID は、ファイルや他の共有リソースへのアクセス時にアクセス許可の チェックに使用 される、追加のグループ ID の集合である。 カーネル 2.6.4 より前の Linux では、一つのプロセスあたりの 補 助グループのメンバー数は最大で 32 である。 カーネル 2.6.4 以降では、一つのプロセスあたりの 補助グルー プのメンバー数は最大で 65536 である。 sysconf(_SC_NGROUPS_MAX) を呼び出すことで、あるプロセスがメン バーとなることができる可能性のある 補助グループ数を知ることができる。 プロセスは、自分の補助グループ ID の集合を getgroups(2) で取得でき、 setgroups(2) で集合を変更できる。 fork(2) で生成された子プロセスは親プロセスのユーザー ID とグループ ID を継承する。 execve(2) の間、プロ セスの実ユーザー/グループ ID と補助グループ ID 集合は不変である。 実効 ID と保存セット ID は変更される可 能性がある (execve(2) で説明されている)。 上記の目的以外にも、プロセスのユーザー ID は他の様々な場面で利用される。 * シグナルを送る許可の判定時 (kill(2) 参照) * プロセスのスケジューリング関連のパラメーター (nice 値、 リアルタイムスケジューリングポリシーや優先 度、CPU affinity、 入出力優先度) の設定許可の判定時。 スケジューリング関連のパラメーター設定には setpriority(2), sched_setaffinity(2), sched_setscheduler(2), sched_setparam(2), sched_setattr(2), ioprio_set(2) が使用される。 * リソース上限のチェック時 (getrlimit(2) 参照) * プロセスが生成できる inotify インスタンス数の上限のチェック時 (inotify(7) 参照)
準拠
プロセス ID、親プロセス ID、プロセスグループ ID、セッション ID は POSIX.1-2001 で規定されている。 実 ID、実効 ID、保存セット ID のユーザー ID / グループ ID および 補助グループ ID は POSIX.1-2001 で規定され ている。 ファイルシステムユーザー ID / グループ ID は Linux による拡張である。
注意
POSIX のスレッド仕様では、これらの識別子がプロセス内の全スレッドで 共有されることを求めている。 しかしな がら、カーネルのレベルでは、Linux はスレッド毎に別々の ユーザーとグループに関する識別子を管理している。 NPTL スレッド実装が、(例えば setuid(2), setresuid(2) などの呼び出しによる) ユーザーやグループに関する識 別子に対する変更が プロセス内の全ての POSIX スレッドに対して反映されることを保証する ための処理を行ってい る。
関連項目
bash(1), csh(1), ps(1), access(2), execve(2), faccessat(2), fork(2), getgroups(2), getpgrp(2), getpid(2), getppid(2), getsid(2), kill(2), killpg(2), setegid(2), seteuid(2), setfsgid(2), setfsuid(2), setgid(2), setgroups(2), setresgid(2), setresuid(2), setuid(2), waitpid(2), euidaccess(3), initgroups(3), tcgetpgrp(3), tcsetpgrp(3), capabilities(7), namespaces(7), path_resolution(7), pid_namespaces(7), signal(7), user_namespaces(7), unix(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告 に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。