SETEUID(2)

名前
seteuid, setegid - 実効ユーザー ID や 実効グループ ID を設定する

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

int seteuid(uid_t euid);
int setegid(gid_t egid);

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

seteuid(), setegid():
    _BSD_SOURCE || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600

説明
seteuid() は呼び出し元のプロセスの実効ユーザー ID を設定する。 非特権ユーザーのプロセスの場合、実効ユーザー ID に設定できるのは、 実ユーザー ID・実効ユーザー ID・保存 set-user-ID のいずれかだけである。 setegid() は「ユーザー」ではなく「グループ」に対して全く同じことを行う。

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

エラー

EINVAL
    対象のユーザー ID かグループ ID がこのユーザー名前空間では有効ではない。

EPERM
    呼び出し元のプロセスに特権がなく、 euid (egid) が実ユーザー (グループ) ID、または実効ユーザー (グループ) ID、 保存 set-user-ID (保存 set-group-ID) のいずれでもではない (Linux においては、 seteuid() では CAP_SETUID ケーパビリティ (capability) が、 setegid() では CAP_SETGID ケーパビリティがない場合に、特権がないと判断される)。

準拠
4.3BSD, POSIX.1-2001.

注意
実効ユーザー (グループ) ID を保存 set-user-ID (保存 set-group-ID) に 設定できるのは、Linux 1.1.37 (1.1.38) 以降である。 全てのシステムにおいて _POSIX_SAVED_IDS をチェックすべきである。

glibc 2.0 では、 seteuid(euid) は setreuid(-1, euid) と等価であり、保存 set-user-ID を変更するかもしれない。 glibc 2.1 では、 setresuid(-1, euid, -1) と等価であり、保存 set-user-ID 変更しない。 同様のことが setegid() にも言えるが、 glibc 2.2 か 2.3 で、 実装が setregid(-1, egid) から setresgid(-1, egid, -1) へ変更された点だけが違う (どの glibc バージョンで変更が行われたかは、ハードウェアアーキテクチャーによって異なる)。 POSIX.1 では、 seteuid() (setegid()) で、 euid (egid) として現在の実効ユーザー (グループ) ID と同じ値を指定可能である 必要はないとされており、いくつかの実装では euid (egid) として現在の実効ユーザー (グループ) ID と同じ値を 指定することができない。

  C ライブラリとカーネル ABI の違い
Linux では、 seteuid() と setegid() は、それぞれ setreuid(2) と setresgid(2) を呼び出すライブラリ関数として実装されている。

関連項目
geteuid(2), setresuid(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/ に書かれている。