C SECCOMP阻止或关闭STDIN / STDOUT

时间:2019-07-18 18:24:15

标签: c linux systems-programming execl seccomp

我现在正在实现在fork之后在子进程中运行另一个程序。

export type Wrapped<T> = {
  [P in keyof T]: T[P];
} & {
  [symbol in keyof T]?: T[symbol];  // doesn't work
} & { _state: number }

如上所述,我正在测试运行只是简单的“ Hello world”的C / Python / Java程序。

export type Wrapped<T> = {
  [P in keyof T]: T[P];
} & { _state: number } & {
  [Symbol.toPrimitive](hint: "string"): string;
  [Symbol.toPrimitive](hint: "default"): string;
  [Symbol.toPrimitive](hint: "number"): number;
}

我允许使用 seccomp 进行一些白名单系统调用。

Python和C程序运行,其输出重定向到文件。

对于Java,子进程正常终止,但是如果加载 seccomp ,输出将消失。否则,我会看到“ Hello World”消息。

谢谢。

1 个答案:

答案 0 :(得分:0)

我自己回答。

  1. 我试图在JVM上运行Java程序。它没有向父母发送正确的信号,所以看起来一切都很好。

  2. 我的问题与I / O问题,缓冲的I / O,刷新或文件描述符无关。

  3. 我通过逐行删除系统调用来测试ALLOW规则。

以下是JVM的最小系统调用:

    SCMP_SYS(access),
    SCMP_SYS(arch_prctl),
    SCMP_SYS(brk),
    SCMP_SYS(clock_getres),
    SCMP_SYS(clone),
    SCMP_SYS(close),
    SCMP_SYS(connect),
    SCMP_SYS(execve),
    SCMP_SYS(exit_group),
    SCMP_SYS(fchdir),
    SCMP_SYS(fcntl),
    SCMP_SYS(fstat),
    SCMP_SYS(ftruncate),
    SCMP_SYS(futex),
    SCMP_SYS(getcwd),
    SCMP_SYS(getdents),
    SCMP_SYS(geteuid),
    SCMP_SYS(getpid),
    SCMP_SYS(gettid),
    SCMP_SYS(getuid),
    SCMP_SYS(kexec_load),
    SCMP_SYS(kill),
    SCMP_SYS(lseek),
    SCMP_SYS(lstat),
    SCMP_SYS(mkdir),
    SCMP_SYS(mmap),
    SCMP_SYS(mprotect),
    SCMP_SYS(munmap),
    SCMP_SYS(openat),
    SCMP_SYS(prctl),
    SCMP_SYS(pread64),
    SCMP_SYS(prlimit64),
    SCMP_SYS(pselect6),
    SCMP_SYS(read),
    SCMP_SYS(readlink),
    SCMP_SYS(rt_sigaction),
    SCMP_SYS(rt_sigprocmask),
    SCMP_SYS(rt_sigreturn),
    SCMP_SYS(sched_getaffinity),
    SCMP_SYS(sched_yield),
    SCMP_SYS(set_robust_list),
    SCMP_SYS(set_tid_address),
    SCMP_SYS(socket),
    SCMP_SYS(stat),
    SCMP_SYS(sysinfo),
    SCMP_SYS(uname),
    SCMP_SYS(unlink),
    SCMP_SYS(write)