如何正确删除功能

How to properly drop capabilities?

本文关键字:功能 删除 何正确      更新时间:2023-10-16

在C++程序中,我需要以下功能:

dac_override设置用户标识符setgidchroot

我不需要任何其他的,我想立即在程序中删除它们,然后稍后再删除其他的。

做这件事的正确方法是什么?

为清晰起见进行编辑:

所以,我有root,它实际上只是一堆功能。我的程序几乎不需要这些上限中的任何一个,所以我想去掉我提到的四个之外的所有上限。我相信这样做的方法是使用

prctl(PR_CAPBSET_DROP,CAP_SYS_CHROOT, 0, 0, 0);

但当我做时

if(prctl(PR_CAPBSET_READ,CAP_SYS_CHROOT, 0, 0, 0) == 1)
    err(0, "CAP_SYS_CHROOT drop fail");

我犯了个错误。我仍然可以记录。

我已经弄明白了。这里最好的方法是使用libcap ng。

以下代码适用于我。

capng_clear(CAPNG_SELECT_BOTH);
capng_updatev(CAPNG_ADD, (capng_type_t)(CAPNG_EFFECTIVE | CAPNG_PERMITTED), CAP_SETUID, CAP_SETGID, -1);
capng_apply(CAPNG_SELECT_BOTH);