在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。
答案 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);