【发布时间】:2020-12-05 01:56:01
【问题描述】:
我想知道是否可以在 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)?我将如何实施?
【问题讨论】: