如何正确删除功能?

时间:2014-09-06 19:44:54

标签: c++ linux

在C ++程序中,我需要这些功能:

dac_override setuid的 setgid的 的chroot

我不需要任何其他人,我想立即将它们丢弃在程序中,然后放弃其他程序。

这样做的正确方法是什么?

为了清晰起见编辑:

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

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");

我犯了错误。我仍然可以chroot。

1 个答案:

答案 0 :(得分:2)

我已经弄明白了。这里最好的方法是使用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);