【问题标题】:Run a process from C with a seccomp profile使用 seccomp 配置文件从 C 运行进程
【发布时间】:2021-05-14 19:04:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux system-calls seccomp


    【解决方案1】:

    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 过滤器代码。例如通过实际二进制的二进制检测(添加额外代码)。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2017-01-26
      • 2020-12-10
      • 2012-05-13
      相关资源
      最近更新 更多