是否可以从 Go 进程应用 Linux 内核 SECCOMP 配置文件?
Is it possible to apply a Linux kernel SECCOMP profile from a Go process?
我正在尝试在 kernel SECCOMP 过滤器的支持下实现系统调用跟踪器,以通过过滤一些系统调用类型来减少开销。
我找到的所有实现都在 C 中,由于 Go threading/go-routines 和 fork()
.[=16= 的特殊考虑,我无法弄清楚如何将其映射到 Go ]
示例代码(C):
if ((pid = fork()) == 0) {
ptrace(PTRACE_TRACEME, 0, 0, 0);
/* To avoid the need for CAP_SYS_ADMIN */
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) {
perror("prctl(PR_SET_NO_NEW_PRIVS)");
return 1;
}
if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog) == -1) {
perror("when setting seccomp filter");
return 1;
}
kill(getpid(), SIGSTOP);
return execvp(argv[1], argv + 1);
经过一些研究,我发现为了在 Go Lang 中执行类似 fork()
的功能,我们可以使用 syscall.ForkExec or exec.Command, but both seem to be limited to the set of pre-exec operations that can be configured through the parameter syscall.SysProcAttr,同时它提供对 PTRACE_TRACEME 调用的支持,它不为 SECCOMP 所需的 prctl() 提供任何支持。
有什么方法可以从 GoLang 生成的进程中启动“ptraceable”“seccomped”子进程吗?
有两个库可以用于此:
- https://godoc.org/github.com/tfogal/ptrace - ptrace 包提供了 ptrace 系统调用的接口。
- https://godoc.org/github.com/seccomp/libseccomp-golang - 包 seccomp 为 libseccomp 提供绑定,libseccomp 是一个包装 Linux seccomp 系统调用的库。 Seccomp 使应用程序能够限制系统调用对自身及其子项的使用。
免责声明:我是一名 C 程序员,并为 libseccomp 做出了贡献;但 golang 不是我的专长,所以我不确定你的示例代码在该语言中的等价物是什么。
我正在尝试在 kernel SECCOMP 过滤器的支持下实现系统调用跟踪器,以通过过滤一些系统调用类型来减少开销。
我找到的所有实现都在 C 中,由于 Go threading/go-routines 和 fork()
.[=16= 的特殊考虑,我无法弄清楚如何将其映射到 Go ]
示例代码(C):
if ((pid = fork()) == 0) {
ptrace(PTRACE_TRACEME, 0, 0, 0);
/* To avoid the need for CAP_SYS_ADMIN */
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) {
perror("prctl(PR_SET_NO_NEW_PRIVS)");
return 1;
}
if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog) == -1) {
perror("when setting seccomp filter");
return 1;
}
kill(getpid(), SIGSTOP);
return execvp(argv[1], argv + 1);
经过一些研究,我发现为了在 Go Lang 中执行类似 fork()
的功能,我们可以使用 syscall.ForkExec or exec.Command, but both seem to be limited to the set of pre-exec operations that can be configured through the parameter syscall.SysProcAttr,同时它提供对 PTRACE_TRACEME 调用的支持,它不为 SECCOMP 所需的 prctl() 提供任何支持。
有什么方法可以从 GoLang 生成的进程中启动“ptraceable”“seccomped”子进程吗?
有两个库可以用于此:
- https://godoc.org/github.com/tfogal/ptrace - ptrace 包提供了 ptrace 系统调用的接口。
- https://godoc.org/github.com/seccomp/libseccomp-golang - 包 seccomp 为 libseccomp 提供绑定,libseccomp 是一个包装 Linux seccomp 系统调用的库。 Seccomp 使应用程序能够限制系统调用对自身及其子项的使用。
免责声明:我是一名 C 程序员,并为 libseccomp 做出了贡献;但 golang 不是我的专长,所以我不确定你的示例代码在该语言中的等价物是什么。