备注

原始的Linux setgid()系统调用仅支持16位组ID。随后,Linux 2.4添加了支持32位ID的setgid32()。 glibc setgid()包装函数透明地处理了内核版本之间的差异。

C library/kernel differences

在内核级别,用户ID和组ID是每个线程的属性。但是,POSIX要求进程中的所有线程共享相同的凭据。 NPTL线程实现通过为更改过程UID和GID的各种系统调用提供包装函数来处理POSIX要求。这些包装函数(包括用于setgid()的包装函数)采用基于信号的技术,以确保当一个线程更改凭据时,进程中的所有其他线程也都更改其凭据。有关详细信息,请参见nptl(7)。

SETGID - Linux手册页

Linux程序员手册 第2部分
更新日期: 2019-03-06

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4。

语法

#包括
#包括

int setgid(gid_t gid);

说明

setgid()设置调用进程的有效组ID。如果调用进程具有特权(更准确地说:在其用户名称空间中具有CAP_SETGID功能),则还将设置实际GID和保存的set-group-ID。

在Linux下,setgid()的实现类似于具有_POSIX_SAVED_IDS功能的POSIX版本。这允许不是set-user-ID-root的set-group-ID程序放弃其所有组特权,执行一些未特权的工作,然后以安全的方式重新使用原始的有效组ID。

错误说明

EINVAL
gid中指定的组ID在此用户名称空间中无效。
EPERM
调用进程没有特权(在其用户名称空间中不具有CAP_SETGID功能),并且gid与调用进程的真实组ID或保存的set-group-ID不匹配。

另外参见

getgid(2),setegid(2),setregid(2),功能(7),凭据(7),user_namespaces(7)

名称

setgid-设置组标识

日期:2019-08-20 17:59:20 来源:oir作者:oir