我想知道特定 docker 容器是否运行默认的 seccomp 配置文件。我无法访问用于启动容器的命令行,也无法访问 Dockerfile。
启动后ps aufxwww
,我可以看到该进程/usr/bin/dockerd-current
有选项--seccomp-profile=/etc/docker/seccomp.json
。这确实是默认的 seccomp 配置文件。
但是,启动容器化应用程序的过程/usr/bin/docker-containerd-current
尚未完成。并docker inspect
返回:"SecurityOpt": null,
。
那么我该相信哪一个?
编辑
更令人惊讶的是,我在运行 docker 时明确指定了 seccomp 过滤器
docker run -d --security-opt seccomp=/etc/docker/seccomp.python.json friendly
并且/proc/$pid/status
文件返回seccomp 0
。
根据这位男士的说法,我原本的期望是:
2 SECCOMP_MODE_FILTER
答案1
我并不是专家,实际上我之所以找到这篇文章是因为我在谷歌上搜索了同样的问题,但我发现了这一点。
如果您使用 Seccomp 配置文件运行 Docker,则可以不指定任何内容,docker 将使用默认值,或者在daemon.json
命令行中自行指定配置文件,然后运行:
docker run -it alpine /bin/sh
/ # grep Seccomp /proc/1/status
Seccomp: 2
如您所见,您确实可以看到 Seccomp 过滤器在 docker 内部处于打开状态。如果您明确告诉 docker 在没有 Seccomp 配置文件的情况下运行,您将得到 0。
docker run -it --security-opt seccomp=unconfine alpine /bin/sh
/ # grep Seccomp /proc/1/status
Seccomp: 0
所以您可以从 docker 内部看到它。也许这是有道理的,因为 Docker 内部的进程需要受到 Seccomp 配置文件的限制。
您还可以通过以下方式测试配置文件是否执行某些操作下载默认配置文件并从中删除一些内容,例如chown
,然后尝试:
docker run -it --security-opt seccomp=/etc/docker/myseccomp.json alpine /bin/sh
/ # touch testfile
/ # chown 100.100 testfile
chown: testfile: Operation not permitted
最后,根据手册页从内核 4.14 开始你可以看到一些东西:
/proc/sys/kernel/seccomp/actions_avail
我的 4.9 内核中不存在这个。希望这对某些人有帮助。