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.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。