SETEUID - Linux手册页

时间:2019-08-20 17:59:20  来源:igfitidea点击:

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/