C中setgroups(size_t size, const gid_t *list)
方法允许我设置调用进程的补充组ID。
问题1:
但是为了运行它,我们需要拥有适当的权限,所以我运行这个程序而不会出现不允许操作错误的唯一方法是使用 root 运行它。但这是否意味着使用这种方法我们只能设置根组?
问题2:
另一方面,我打算做的是给定一个特定的用户和一个 gid 列表,我想将给定的 gid 设置为给定用户的补充组。C/C++ 中是否为此定义了方法?
提前致谢
从技术上讲,在Linux下,你需要CAP_SETGID
功能,它不需要是root(但通常是)。
请注意,这适用于有效gid
,而不是实际gid
。还要注意的是,调用过程的实际/有效gid
不一定与实际/有效uid
相同。您应该查看 setuid
、seteuid
、setgid
和 setegid
的手册页以获取更多详细信息,但一种情况是 SUID 程序setegid
回非特权组,然后使用 setgroups
。