如何在Linux中删除补充组?

问题描述 投票:0回答:1

我有一个可执行文件,它是一个非root用户和组的ug+s。我希望它能留下它最初所拥有的所有补充团体。有没有办法让这种情况发生?它看起来不像setgroups调用允许你这样做,如果你不是root。当我尝试它时,我得到EPERM

看起来应该有办法失去你以前拥有的特权。

c linux posix privileges
1个回答
1
投票

简短的回答是“没有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的人可以使用该可执行文件来运行某种特权升级攻击。

热门问题
推荐问题
最新问题