繁体   English   中英

在没有 --privileged 的​​ docker 容器中使用 perf

[英]Use perf inside a docker container without --privileged

我正在尝试使用 Docker 容器内的 perf 工具来记录给定的命令。

kernel.perf_event_paranoid设置为 1,但是当我没有放置--privileged标志时,容器的行为就像是 2。

我可以使用--privileged ,但是我正在运行 perf 的代码不受信任,如果我可以通过允许 perf 工具承担轻微的安全风险,那么在容器上授予特权似乎是不同级别的风险。

还有其他方法可以在容器内使用 perf 吗?

~$ docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   7392c3b/17.03.1-ce
 Built:        Tue May 30 17:59:44 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   7392c3b/17.03.1-ce
 Built:        Tue May 30 17:59:44 2017
 OS/Arch:      linux/amd64
 Experimental: false

~$ cat /proc/sys/kernel/perf_event_paranoid
1
~$ perf record ./my-executable
perf_event_open(..., PERF_FLAG_FD_CLOEXEC) failed with unexpected error 1 (Operation not permitted)
perf_event_open(..., 0) failed unexpectedly with error 1 (Operation not permitted)
Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
 -1 - Not paranoid at all
  0 - Disallow raw tracepoint access for unpriv
  1 - Disallow cpu events for unpriv
  2 - Disallow kernel profiling for unpriv

经过一番研究,问题不在于perf_event_paranoid ,而在于perf_event_open (syscall) 已在 docker 中列入黑名单: https ://docs.docker.com/engine/security/seccomp/ "Docker v17.06: Seccomp Docker 的安全配置文件”

默认配置文件阻止的重要系统调用

perf_event_open跟踪/分析系统调用,这可能会泄漏主机上的大量信息。

我的第一个解决方法是使用一个脚本来下载官方 seccomp 文件https://github.com/moby/moby/blob/master/profiles/seccomp/default.json ,并将perf_event_open添加到白名单-列出的系统调用。

然后我用--security-opt seccomp=my-seccomp.json

使用--cap-add SYS_ADMIN运行--cap-add SYS_ADMIN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM