SETREUID(2) | Linux Programmer's Manual | SETREUID(2) |
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():
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() からのリターンが失敗かどうかの確認を省略することは重大なセキュリティ上のエラーとなる。
POSIX.1-2001, 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() のラッパー関数は カーネルバージョンによるこの違いを吸収している。
getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2), setuid(2), capabilities(7), user_namespaces(7)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2014-09-21 | Linux |