如何对子进程进行seccomp?

时间:2016-10-18 12:04:11

标签: c linux sandbox seccomp

我想使用execvp创建一个子进程并对其进行修改(仅授予其读写权限,不使用open)。 为了实现这一点,我必须在 execvp之前调用seccomp函数(它也调用open),因此我应该给自己execvp和{{1权限。但这也意味着我通过open这样的权限给孩子进程打开了。有没有办法阻止子进程调用execvp(例如在调用seccomp之前将其加载到内存中)?

open

3 个答案:

答案 0 :(得分:2)

您只能允许特定路径和标记

char *path = "./app";

// add extra rule for execve
if (seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 1, SCMP_A0(SCMP_CMP_NE, (scmp_datum_t)(path))) != 0) {
    return LOAD_SECCOMP_FAILED;
}
// do not allow "w" and "rw"
if (seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(open), 1, SCMP_CMP(1, SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY)) != 0) {
    return LOAD_SECCOMP_FAILED;
}
if (seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(open), 1, SCMP_CMP(1, SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR)) != 0) {
    return LOAD_SECCOMP_FAILED;
}

答案 1 :(得分:0)

请勿使用execvp。将路径(例如,"./app")解析为绝对路径,然后使用execve执行它。

答案 2 :(得分:0)

您可能需要在未使用的syscall参数中传递一个秘密随机数。