名 前
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(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/ に 書 か れ て い る 。 |