Manpages

名 前

setresuid, setresgid − ユ ー ザ ー や グ ル ー プ の 実 、 実 効 、 保 存 ID を 設 定 す る

書 式

#define _GNU_SOURCE /* feature_test_macros(7) 参 照 */
#include <unistd.h>

int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t
rgid, gid_t egid, gid_t sgid);

説 明

setresuid() は 呼 び 出 し 元 の プ ロ セ ス の 実 (real) ユ ー ザ ー ID、 実 効 (effective) ユ ー ザ ー ID、 保 存 set−user−ID を 設 定 す る 。 非 特 権 ユ ー ザ ー の プ ロ セ ス は 、 そ の 実 UID、 実 効 UID、 保 存 set−user−ID を 、 現 在 の 実 UID、 現 在 の 実 効 UID、 現 在 の 保 存 set−user−ID の ど れ か に 変 更 す る こ と が で き る : 特 権 プ ロ セ ス (Linux で は CAP_SETUID ケ ー パ ビ リ テ ィ (capability) を 持 つ プ ロ セ ス ) は 、 実 UID、 実 効 UID、 保 存 set−user−ID を 任 意 の 値 に 設 定 で き る 。 引 き 数 の ど れ か が −1 の 場 合 は そ の 値 は 変 更 さ れ ず に 残 さ れ る 。 実 UID、 実 効 UID、 保 存 set−user−ID に ど ん な 変 更 が 行 わ れ た か に 関 わ ら ず 、 フ ァ イ ル シ ス テ ム UID は 常 に 実 効 UID (可 能 で あ れ ば 変 更 後 の 新 し い 実 効 UID) と 同 じ 値 に 設 定 さ れ る 。 全 く 同 じ よ う に 、 setresgid() は 呼 び 出 し 元 の プ ロ セ ス の 実 GID、 実 効 GID、 保 存 set−group−ID を 設 定 す る (さ ら に フ ァ イ ル シ ス テ ム GID を 実 効 GID と 同 じ 値 に 修 正 す る )。 非 特 権 プ ロ セ ス は 同 様 の 制 限 を 受 け る 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。 注 意 : 呼 び 出 し 元 が UID 0 で あ っ て も setresuid() が 失 敗 す る 場 合 が あ る 。 setresuid() か ら の リ タ ー ン が 失 敗 か ど う か の 確 認 を 省 略 す る こ と は 重 大 な セ キ ュ リ テ ィ 上 の エ ラ ー と な る 。

エ ラ ー

EAGAIN こ の 呼 び 出 し で 呼 び 出 し 元 の 実

UID が 変 更 さ れ る は ず だ っ た が (つ ま

り 、 ruid が 呼 び 出 し 元 の 実 UID と 一 致 し て い な い )、 必 要 な カ ー ネ ル の デ ー タ 構 造 体 の 割 り 当 て で 一 時 的 な 失 敗 が あ っ た 。

EAGAIN

ruid は 呼 び 出 し 元 の 実 UID と 一 致 し て お ら ず 、 こ の 呼 び 出 し で 実 ユ ー ザ ー ID ruid に 属 す る プ ロ セ ス 数 が 呼 び 出 し 元 の RLIMIT_NPROC リ ソ ー ス 上 限 を 超 過 す る と こ ろ で あ っ た 。 Linux 3.1 以 降 で は 、 こ の エ ラ ー は も は や 発 生 す る こ と は な い (し か し 、 堅 牢 性 が 求 め ら れ る ア プ リ ケ ー シ ョ ン で は こ の エ ラ ー を 確 認 す べ き で あ る )。 execve(2)EAGAIN の 説 明 を 参 照 。

EINVAL

対 象 の ユ ー ザ ー ID や グ ル ー プ ID の う ち 1 つ 以 上 が こ の ユ ー ザ ー 名 前 空 間 で 有 効 で は な い 。

EPERM

呼 び 出 し た プ ロ セ ス が 特 権 を 持 た な い の に (CAP_SETUID ケ ー パ ビ リ テ ィ を 持 た な い の に )、 ID を 許 さ れ て い な い 値 に 変 更 し よ う と し た 。

バ ー ジ ョ ン

Linux で は バ ー ジ ョ ン 2.1.44 よ り 利 用 可 能 に な っ た 。

準 拠

こ れ ら の コ ー ル は 非 標 準 で あ る 。 HP−UX や BSD 系 の い く つ か に も 存 在 す る 。

注 意

HP−UX や FreeBSD で は <unistd.h> に プ ロ ト タ イ プ が 存 在 す る 。 Linux で は 、 glibc 2.3.2 以 降 で プ ロ ト タ イ プ が 提 供 さ れ て い る 。 元 々 の Linux の setresuid() と setresgid() シ ス テ ム コ ー ル は 16 ビ ッ ト の グ ル ー プ ID だ け に 対 応 し て い た 。 そ の 後 、 Linux 2.4 で 、 32 ビ ッ ト の ID に 対 応 し た setresuid32() と setresgid32() が 追 加 さ れ た 。 glibc の setresuid() と setresgid() の ラ ッ パ ー 関 数 は カ ー ネ ル バ ー ジ ョ ン に よ る こ の 違 い を 吸 収 し て い る 。

関 連 項 目

getresuid(2), getuid(2), setfsgid(2), setfsuid(2), setreuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。