Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       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 が適切に設定される。

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

エラー

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

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

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

       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), user_namespaces(7)

この文書について

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