名 前
setfsuid − フ ァ イ ル シ ス テ ム の チ ェ ッ ク に 用 い ら れ る ユ ー ザ ー ID を 設 定 す る
書 式
#include <sys/fsuid.h>
int setfsuid(uid_t fsuid);
説 明
setfsuid() は 、 呼 び 出 し 元 の フ ァ イ ル シ ス テ ム ユ ー ザ ー ID — フ ァ イ ル シ ス テ ム へ の 全 て の ア ク セ ス の チ ェ ッ ク に お い て Linux カ ー ネ ル が 使 用 す る ユ ー ザ ー ID — の 値 を 変 更 す る 。 通 常 は フ ァ イ ル シ ス テ ム ユ ー ザ ー ID の 値 は 実 効 (effective) ユ ー ザ ー ID と 同 じ に な る 。 実 際 、 実 効 ユ ー ザ ー ID が 変 更 さ れ る 度 に フ ァ イ ル シ ス テ ム ユ ー ザ ー ID も ま た 新 し い 実 効 ユ ー ザ ー ID の 値 に 変 更 さ れ る 。 通 常 、 setfsuid() や setfsgid() を 明 示 的 に 呼 び 出 す の は 、 Linux NFS サ ー バ ー の よ う に 、 フ ァ イ ル ア ク セ ス に 用 い る ユ ー ザ ー ID / グ ル ー プ ID を 変 更 し な け れ ば な ら な い が 、 対 応 す る 実 (real)/実 効 (effective) ユ ー ザ ー ID / グ ル ー プ ID は 変 更 し た く な い よ う な プ ロ グ ラ ム に 限 ら れ る 。 NFS サ ー バ ー の よ う な プ ロ グ ラ ム で 、 通 常 の ユ ー ザ ー ID を 変 更 す る と 、 プ ロ セ ス を 望 ま な い シ グ ナ ル に さ ら す 可 能 性 が あ り 、 セ キ ュ リ テ ィ ホ ー ル に な る 。 (下 記 参 照 )
setfsuid() は 、 ス ー パ ー ユ ー ザ ー に よ っ て 呼 び 出 さ れ た 場 合 か 、 fsuid が 呼 び 出 し 元 の 実 ユ ー ザ ー ID、 実 効 ユ ー ザ ー ID、 保 存 セ ッ ト ユ ー ザ ー ID (saved set−user−ID)、 現 在 の フ ァ イ ル シ ス テ ム グ ル ー プ ID の 値 の い ず れ か に 一 致 す る 場 合 に の み 成 功 す る 。
返 り 値
成 功 時 も 失 敗 時 も 、 こ の 呼 び 出 し は 直 前 の 呼 び 出 し 元 の フ ァ イ ル シ ス テ ム ユ ー ザ ー ID の 値 を 返 す 。
バ ー ジ ョ ン
こ の シ ス テ ム コ ー ル は バ ー ジ ョ ン 1.2 以 降 の Linux に 存 在 す る 。
準 拠
setfsuid() は Linux 特 有 で あ り 、 移 植 を 想 定 し た プ ロ グ ラ ム で 使 用 し て は い け な い 。
注 意
glibc が 引 き 数 が ユ ー ザ ー ID と し て 不 正 だ と 判 断 し た 場 合 は 、 シ ス テ ム コ ー ル を 行 わ ず errno に EINVAL を 設 定 し て −1 が 返 さ れ る 。 こ の シ ス テ ム コ ー ル が 導 入 さ れ た 当 時 、 あ る プ ロ セ ス は 同 じ 実 効 ユ ー ザ ー ID を 持 つ 別 の プ ロ セ ス に シ グ ナ ル を 送 信 で き た 。 こ れ は 、 特 権 プ ロ セ ス が フ ァ イ ル の ア ク セ ス 許 可 を チ ェ ッ ク す る た め に 自 身 の 実 効 ユ ー ザ ー ID を 変 更 す る と 、 同 じ ユ ー ザ ー ID を 持 つ 別 の (非 特 権 ) プ ロ セ ス が 送 信 し た シ グ ナ ル を 受 け 取 る よ う に な っ て し ま う こ と を 意 味 す る 。 そ の た め 、 プ ロ セ ス が 、 受 け 取 り た く な い シ グ ナ ル を 受 信 す る 状 態 に な ら ず に 、 フ ァ イ ル の ア ク セ ス 許 可 を チ ェ ッ ク す る た め に 自 身 の ユ ー ザ ー ID を 変 更 で き る よ う に 、 フ ァ イ ル シ ス テ ム ユ ー ザ ー ID 属 性 が 追 加 さ れ た 。 Linux 2.0 以 降 で は 、 シ グ ナ ル の 送 信 許 可 の 扱 い は 異 な り (kill(2) 参 照 )、 プ ロ セ ス は 、 望 ま な い プ ロ セ ス か ら シ グ ナ ル を 受 信 し て し ま う 状 態 に な ら ず に 、 自 身 の 実 効 ユ ー ザ ー ID を 変 更 す る こ と が で き る 。 し た が っ て 、 setfsuid() は 今 日 で は 不 要 で あ り 、 新 規 の ア プ リ ケ ー シ ョ ン で は 使 用 す べ き で は な い (setfsgid(2) も 同 様 )。 元 々 の Linux の setfsuid() シ ス テ ム コ ー ル は 16 ビ ッ ト の グ ル ー プ ID だ け に 対 応 し て い た 。 そ の 後 、 Linux 2.4 で 、 32 ビ ッ ト の ID に 対 応 し た setfsuid32() が 追 加 さ れ た 。 glibc の setfsuid() の ラ ッ パ ー 関 数 は カ ー ネ ル バ ー ジ ョ ン に よ る こ の 違 い を 吸 収 し て い る 。
バ グ
い か な る 種 類 の エ ラ ー メ ッ セ ー ジ も 返 さ ず 、 成 功 し た 場 合 も 失 敗 し た 場 合 も 呼 び 出 し は 同 じ 値 を 返 す た め 、 呼 び 出 し が 成 功 し た か 失 敗 し た か を 直 接 判 定 す る こ と は で き な い 。 そ の 代 わ り 、 直 前 の setfsuid() の 呼 び 出 し が フ ァ イ ル シ ス テ ム グ ル ー プ ID を 変 更 し た か ど う か を 判 定 す る た め に 、 呼 び 出 し 元 は こ の 後 に setfsuid(−1) な ど を 呼 び 出 し て 返 り 値 を 見 な け れ ば な ら な い (setfsuid(−1) は 常 に 失 敗 す る )。 最 低 で も 、 失 敗 し た 場 合 は EPERM く ら い は 返 す べ き で あ る (呼 び 出 し 元 に は CAP_SETUID ケ ー パ ビ リ テ ィ が な か っ た の だ か ら )。
関 連 項 目
kill(2), setfsgid(2), capabilities(7), credentials(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。