C++ 使用C在linux中设置用户的补充组ID

C++ 使用C在linux中设置用户的补充组ID,c++,c,linux,usergroups,C++,C,Linux,Usergroups,C语言中有setgroups(size\u t size,const gid\u t*list)方法,允许我设置调用进程的补充组ID 问题1: 但是为了运行这个程序,我们需要有适当的权限,所以我运行这个程序而没有得到操作不允许的错误的唯一方法是使用root运行它。但这是否意味着使用这种方法我们只能设置根的组 问题2: 另一方面,我打算做的是给一个特定的用户和一个gid列表,我想将给定的gid设置为给定用户的补充组。在C/C++中是否有为此定义的方法 提前感谢在Linux技术上,您需要CAP_SE

C语言中有
setgroups(size\u t size,const gid\u t*list)
方法,允许我设置调用进程的补充组ID

问题1:

但是为了运行这个程序,我们需要有适当的权限,所以我运行这个程序而没有得到操作不允许的错误的唯一方法是使用root运行它。但这是否意味着使用这种方法我们只能设置根的组

问题2:

另一方面,我打算做的是给一个特定的用户和一个gid列表,我想将给定的gid设置为给定用户的补充组。在C/C++中是否有为此定义的方法


提前感谢

在Linux技术上,您需要
CAP_SETGID
功能,它不需要是root(但通常是root)


请注意,这适用于有效的
gid
,而不是实际的
gid
。另请注意,调用过程的实际/有效
gid
不一定与实际/有效
uid
相同。您应该查看
setuid
seteuid
setgid
setegid
的手册页以了解更多详细信息,但是一种情况是,SUID程序将
setegid
返回到一个非特权组,然后使用
setgroups

,我记得
setgroups
只能由特权用户调用。这并不一定意味着root,而是一个具有CAP_SETGID权限的进程。root显然可以设置任何gid,而不仅仅是它自己的组。我对你的第二个问题不是100%肯定。setgroups可能是您想要的,但我不记得涉及的权限问题。您可能应该查看“能力”文献。