1

我想运行一个应用了 seccomp 配置文件的进程(可以来自 C、终端等)。特别是,我希望不允许目标命令读取和写入任何文件,它可以打印到控制台。我的临时 C 大纲是这样的:

int main() {
    scmp_filter_ctx filter = load_filter();
    seccomp_load(filter);
    // execl([sample command with arguments], 0);
    execl("ls", 0)
}

我遇到的问题是execl使用了一些在我的个人资料中被阻止的系统调用。如何确保 only 仅应用于[sample command with arguments]. 同样,这不必在 C 中。基本上,我想运行一些可执行文件,并应用于seccomp这些进程。我正在使用 Ubuntu 18.04。

4

1 回答 1

0

exec*调用是 的前端execve,用户空间中的实现如下所示:

int execve(const char *filename, char * const argv[], char * const envp[]) {
    return syscall(SYS_execve, filename, argv, envp);
}

参考:https ://stackoverflow.com/a/7381910/544721

因此,您可能希望检测所需的二进制文件以在加载后执行 seccomp 过滤器代码。例如,通过实际二进制文件的二进制检测(添加额外代码)。

于 2021-05-15T10:18:16.903 回答