kazmax - Linux で自宅サーバー

setresuid - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 準拠
  7. 履歴
  8. 注意
  9. 関連項目

名前

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

書式

#define _GNU_SOURCE
#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 が NPROC rlimit を超えてしまう。
EPERM
呼び出したプロセスが特権を持たないのに (CAP_SETUID ケーパビリティを持たないのに)、 ID を許されていない値に変更しようとした。

準拠

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

履歴

このシステム・コールは HP-UX で最初に導入された。 Linux ではバージョン 2.1.44 より利用可能になった。 最近は (Linux バイナリ・エミュレーションのために) FreeBSD にも用意されている。

注意

HP-UX や FreeBSD では <unistd.h> にプロトタイプが存在する。 Linux では、glibc 2.3.2 以降で _GNU_SOURCE を定義することにより、 プロトタイプが与えられる。

関連項目