我想知道是否可以在 Go 程序的子进程中安装 seccomp 过滤器。目前我正在生成子进程,如下所示:
cmd := exec.Command(target)
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.SysProcAttr = &unix.SysProcAttr{
Ptrace: true,
}
cmd.Start()
cmd.Wait()
这很好用,并SysProcAttr
提供了一种在子进程中启用 Ptrace 的机制。但是,似乎不支持在孩子中安装 seccomp 过滤器。我知道https://github.com/elastic/go-seccomp-bpf和https://github.com/seccomp/libseccomp-golang但这些库似乎只支持在当前进程(以及任何子进程)中安装 seccomp 过滤器从当前进程产生的)。我只想在子级中安装过滤器,而不是在父级中,因为我不希望父级也被沙箱化。
在 C 语言中,在子进程中安装 seccomp 过滤器的机制是分叉,在当前进程(从子进程中)安装过滤器,然后执行。但是,在 Go 中似乎不支持像这样分离 fork 和 exec。有什么办法可以解决这个问题,还是我需要使用 C 来正确执行此操作?
可以SysProcAttr
扩展为允许 seccomp 过滤器,或者允许在 fork 之后和 exec 之前运行任意代码(在某些时候我假设它调用 fork 然后 exec)?我将如何实施呢?