2014-09-06 108 views
2

在C++程序中,我需要的功能:如何正確刪除功能?

dac_override 的setuid setgid的 的chroot

我不需要任何人,我想立即把它們的程序,然後下降其他人以後。

這樣做的正確方法是什麼?

編輯爲清楚:

所以,我有根,這實際上只是一堆的能力。我的程序幾乎不需要這些大寫字母,所以我想刪除除前面提到的四個字符以外的所有字符。我認爲,要做到這一點的方法是使用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。

回答

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