Docker seccomp

注:本文翻譯自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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容