SETEUID - Linux手册页
Linux程序员手册 第2部分
更新日期: 2017-09-15
名称
seteuid,setegid-设置有效的用户或组ID
语法
#包括
#包括
int seteuid(uid_t euid);
int setegid(gid_t egid);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
seteuid(),setegid():
- _POSIX_C_SOURCE>= 200112L || / * Glibc版本
说明
seteuid()设置调用过程的有效用户ID。非特权进程只能将有效用户ID设置为真实用户ID,有效用户ID或保存的设置用户ID。
对于带有"组"而不是"用户"的setegid()来说,也是如此。
返回值
成功时,返回零。如果出错,则返回-1,并正确设置errno。
注意:在某些情况下,即使调用者的UID为0,seteuid()也会失败;忽略检查seteuid()的失败返回是一个严重的安全错误。
错误说明
- EINVAL
- 目标用户或组ID在此用户名称空间中无效。
- EPERM
- 对于seteuid():调用过程没有特权(在其用户名称空间中没有CAP_SETUID功能),并且euid与当前的实际用户ID,当前的有效用户ID或当前保存的set-user-ID不匹配。
- 对于setegid():调用过程没有特权(在其用户名称空间中不具有CAP_SETGID功能),并且egid与当前的实际组ID,当前的有效组ID或当前保存的set-group-ID不匹配。
遵循规范
POSIX.1-2001,POSIX.1-2008、4.3BSD。
备注
从Linux 1.1.37(1.1.38)开始,可以将有效用户(组)ID设置为已保存的set-user-ID(已保存的set-group-ID)。在任意系统上,应检查_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(),不同之处在于,从setregid(-1,egid)到setresgid(-1,egid,-1)的实现更改发生在glibc 2.2或2.3中(取决于硬件体系结构)。
根据POSIX.1,seteuid()(setegid())不需要允许euid(egid)与当前有效用户(组)ID相同,并且某些实现不允许这样做。
C library/kernel differences
在Linux上,seteuid()和setegid()被实现为分别调用setreuid(2)和setregid(2)的库函数。
另外参见
geteuid(2),setresuid(2),setreuid(2),setuid(2),功能(7),凭据(7),user_namespaces(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。