Man page - setreuid(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru ro de

Manual

SETREUID

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意
C ラ イ ブ ラ リ と カ ー ネ ル の 違 い
関 連 項 目
こ の 文 書 に つ い て

名 前

setreuid, setregid - 実 (real) と 実 効 (effective) ユ ー ザ ー (グ ル ー プ ) ID を 設 定 す る

書 式

#include <sys/types.h>
#include <unistd.h>

int setreuid(uid_t ruid , uid_t euid );
int setregid(gid_t
rgid , gid_t egid );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

setreuid (), setregid ():

_XOPEN_SOURCE >= 500
|| /* Since glibc 2.19: */ _DEFAULT_SOURCE
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE

説 明

setreuid () は 呼 び 出 し 元 の プ ロ セ ス の 実 (real) ユ ー ザ ー ID と 実 効 (effective) ユ ー ザ ー ID を 設 定 す る 。

実 ユ ー ザ ー ID や 実 効 ユ ー ザ ー ID に -1 を 与 え た 場 合 、 シ ス テ ム は そ の ID を 変 更 し な い 。

非 特 権 プ ロ セ ス は 実 効 ユ ー ザ ー ID を 実 ユ ー ザ ー ID ま た は 実 効 ユ ー ザ ー ID ま た は 保 存 set-user-ID に し か 設 定 で き な い 。

非 特 権 ユ ー ザ ー は 、 実 ユ ー ザ ー ID を 実 ユ ー ザ ー ID ま た は 実 効 ユ ー ザ ー ID に し か 設 定 で き な い 。

実 ユ ー ザ ー ID が 設 定 さ れ た り ( ruid が -1 で は な い )、 実 効 ユ ー ザ ー ID が 前 の 実 ユ ー ザ ー ID と 異 っ た 値 に 設 定 さ れ た 場 合 、 保 存 set-user-ID に は 新 し い 実 効 ユ ー ザ ー ID の 値 が 設 定 さ れ る 。

こ れ と 全 く 同 様 に 、 setregid () は 呼 び 出 し 元 の プ ロ セ ス の 実 グ ル ー プ ID と 実 効 グ ル ー プ ID を 設 定 し 、 上 記 の 説 明 で 「 ユ ー ザ ー 」 を 「 グ ル ー プ 」 に 読 み 替 え た こ と が 成 り 立 つ 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は -1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

注 意 : 呼 び 出 し 元 が UID 0 で あ っ て も setreuid () が 失 敗 す る 場 合 が あ る 。 setreuid () か ら の リ タ ー ン が 失 敗 か ど う か の 確 認 を 省 略 す る こ と は 重 大 な セ キ ュ リ テ ィ 上 の エ ラ ー と な る 。

エ ラ ー

EAGAIN

こ の 呼 び 出 し で 呼 び 出 し 元 の 実 UID が 変 更 さ れ る は ず だ っ た が (つ ま り 、 ruid が 呼 び 出 し 元 の 実 UID と 一 致 し て い な い )、 必 要 な カ ー ネ ル の デ ー タ 構 造 体 の 割 り 当 て で 一 時 的 な 失 敗 が あ っ た 。

EAGAIN

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

EINVAL

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

EPERM

The calling process is not privileged (on Linux, does not have the necessary capability in its user namespace: CAP_SETUID in the case of setreuid (), or CAP_SETGID in the case of setregid ()) and a change other than (i) swapping the effective user (group) ID with the real user (group) ID, or (ii) setting one to the value of the other or (iii) setting the effective user (group) ID to the value of the saved set-user-ID (saved set-group-ID) was specified.

準 拠

POSIX.1-2001, POSIX.1-2008, 4.3BSD ( setreuid () と setregid () 関 数 コ ー ル は 4.2BSD で 初 め て 登 場 し た )。

注 意

実 効 ユ ー ザ ー (グ ル ー プ ) ID を 保 存 ユ ー ザ ー (グ ル ー プ ) ID に 設 定 す る こ と が 、 Linux 1.1.37 (1.1.38) か ら 可 能 に な っ た 。

POSIX.1 で は 、 Linux が 非 特 権 プ ロ セ ス に 対 し て 認 め て い る ID の 変 更 の 全 パ タ ー ン を 規 定 し て い る わ け で は な い 。 setreuid () で は 、 実 効 ユ ー ザ ー ID を 実 ユ ー ザ ー ID も し く は 保 存 set-user-ID と 同 じ 値 に す る こ と が で き る が 、 非 特 権 プ ロ セ ス が 実 ユ ー ザ ー ID を 実 ユ ー ザ ー ID、 実 効 ユ ー ザ ー ID、 保 存 set-user-ID の ど の 値 に も 設 定 で き る か は 規 定 さ れ て い な い 。 setregid () で は 、 実 グ ル ー プ ID を 保 存 set-group-ID と 同 じ 値 に 変 更 で き 、 実 効 グ ル ー プ ID を 実 グ ル ー プ ID や 保 存 set-group-ID と 同 じ 値 に 変 更 で き る 。 ど の よ う な ID の 変 更 が 認 め ら れ て い る か の 正 確 な 詳 細 は 実 装 ご と に 異 な る 。

POSIX.1 で は 、 こ れ ら の シ ス テ ム コ ー ル が 保 存 set-user-ID や 保 存 set-group-ID に 与 え る 影 響 に つ い て は 規 定 し て い な い 。

元 々 の Linux の setreuid () と setregid () シ ス テ ム コ ー ル は 16 ビ ッ ト の グ ル ー プ ID だ け に 対 応 し て い た 。 そ の 後 、 Linux 2.4 で 、 32 ビ ッ ト の ID に 対 応 し た setreuid32 () と setregid32 () が 追 加 さ れ た 。 glibc の setreuid () と setregid () の ラ ッ パ ー 関 数 は カ ー ネ ル バ ー ジ ョ ン に よ る こ の 違 い を 吸 収 し て い る 。

C ラ イ ブ ラ リ と カ ー ネ ル の 違 い

At the kernel level, user IDs and group IDs are a per-thread attribute. However, POSIX requires that all threads in a process share the same credentials. The NPTL threading implementation handles the POSIX requirements by providing wrapper functions for the various system calls that change process UIDs and GIDs. These wrapper functions (including those for setreuid () and setregid ()) employ a signal-based technique to ensure that when one thread changes credentials, all of the other threads in the process also change their credentials. For details, see nptl (7).

関 連 項 目

getgid (2), getuid (2), seteuid (2), setgid (2), setresuid (2), setuid (2), capabilities (7), credentials (7), user_namespaces (7)

こ の 文 書 に つ い て

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