SETRESUID(2) |
Linux Programmer's Manual |
SETRESUID(2) |
名前
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 が適切に設定される。
エラー
-
EAGAIN
-
uid が現在のユーザー ID と違う値で、この呼び出しによりユーザー ID がリソース上限
RLIMIT_NPROC を超えてしまう。
-
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)
この文書について
この man ページは Linux
man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。