我有一个对非根用户和组ug+s
的可执行文件。我希望它把原来的所有补充小组都留下来。有办法做到这一点吗?如果您不是根用户,那么看起来setgroups
调用不允许您这样做。当我尝试的时候,我会得到EPERM
。
似乎应该有办法失去你以前拥有的特权。
最佳答案
简而言之,答案是“没有cap_setgid的进程不能”。它是by design that setgroups can't be used to remove groups when the process has no privileges。前一个链接是一篇优秀的LWN文章,详细说明了为什么不。
在我的特殊情况下,由于我正在立即创建一个用户名称空间,这些补充组无论如何都会映射到“nobody”。所以这不是很重要。如果这很重要,您可以使用setcap(8)
在包装可执行文件上设置功能,该包装可执行文件检查它是否由具有预期组权限的预期用户运行,然后删除组并删除cap_setgid并运行真正要运行的可执行文件。用于执行此操作的命令是:
sudo setcap cap_setgid+ep wrapper_exe
不过,要小心,现在有可能是系统上有shell的人可以使用该可执行文件来运行某种权限提升攻击,如果您编写得不仔细的话。
关于c - 如何在Linux中删除补充组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48895619/