在使用 RPM 包构建的 GNU/Linux 系统上,该rpmlint实用程序会抱怨setgroups之前不调用setuid.
这个想法是,在删除特权之前,进程还应该删除补充组 ID 的列表setgroups(0, NULL)。
但是,这是应该一直做的事情吗?
假设我们正在运行 setuid root,并携带来自我们原始安全上下文的补充组 ID 列表:与真实用户 ID 关联的组。
当我们回到那个真实的用户 ID 时,我们不一定想要丢失这些组:作为原始用户执行的代码可能取决于那些补充成员资格,对吧?
setgroups(0, NULL)在将 privs 删除给原始用户之前,我们是否应该在 setuid 代码中省略?
(顺便说一句,我们当然不会setuid在 Linux 上放弃权限,因为这对于运行 setuid 非 root 的代码不起作用。)