欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker seccomp

程序员文章站 2022-06-17 08:05:23
...

注:本文翻译自Docker Security – part 2中关于Seccomp的部分.请查看原文来获取更详细的信息.

如果你用的是Ubuntu 14.04,并且是采用编译的方式来使用Docker,那么在你docker run一个容器时,你肯定会遇到这样一个错误:
**docker: Error response from daemon: Cannot start container daaa7a0c0b2c916019a68bbbdcc77e44a5b0a56478dc5c310665a00226923035: [9] System error: seccomp: config provided but seccomp not supported.
**

这个错误中提到了不支持seccomp.

那到底什么是seccomp呢?

SeccompSecure computing mode的缩写,它是Linux内核提供的一个操作,用于限制一个进程可以执行的系统调用.当然,我们需要有一个配置文件来指明进程到底可以执行哪些系统调用,不可以执行哪些系统调用.

在Docker中,它使用Seccomp来限制一个容器可以执行的系统调用.在Ubuntu14.04系统中,default Docker binary还不支持Seccomp.因此,我们要想使用Seccomp,就得使用static Docker binary来安装Docker.在Ubuntu 14.x以后的版本中,default Docker binary中就默认支持Seccomp了.

默认情况下,Seccomp会禁止容器执行64位Linux系统的313个系统调用的44个.我找不到这个Seccomp的默认配置文件在哪.可能是写在了源码中.

我们下面来描述如何使用Seccomp

首先,创建一个配置文件:/home/smakam14/seccomp/profile.json,其内容为:

{
    "defaultAction": "SCMP_ACT_ALLOW",
    "syscalls": [
        {
            "name": "chmod",
            "action": "SCMP_ACT_ERRNO"
        }
    ]
}

在上面的这个配置文件中,默认情况下,我们允许容器执行全部的系统调用.但是,禁止它执行chmod这个系统调用.

然后,我们用这个Seccomp配置文件来启动一个Docker容器:

docker run --rm -it --security-opt seccomp:/home/smakam14/seccomp/profile.json busybox chmod 400 /etc/hosts

结果如下:

chmod: /etc/hosts: Operation not permitted

我们使用docker inspect来查看容器的详细信息.会看到如下输出:

 "SecurityOpt": [
                "seccomp:     
                  {"defaultAction":"SCMP_ACT_ALLOW",
                  "syscalls":[{"name":"chmod","action":"SCMP_ACT_ERRNO"}]}"
            ],

我们也可以在run一个容器的时候,通过--security-opt seccomp:unconfined参数来允许容器执行全部的系统的调用:

docker run --rm -it --security-opt seccomp:unconfined busybox chmod 400 /etc/hosts