CKAD 課程中提及了幾個跟 container 有關的安全性觀念,以前沒注意過,記錄一下
docker
在不少的安裝方法下我們會讓 dockerd 以 root 的使用者權限運行,這也意味著 dockerd、及所有的容器都可以用 root 權限存取系統資源。
在想象中容器化的軟體是被封閉在沙盒內運行——但實際上為非,容器化的技術並沒有真的去將資源做隔離,故一個跑在容器內的惡意程式仍然是有機會存取外面的系統資源的。
不過 docker 方也不是坐以待斃,在設計上它其實有引入部分的權限控制,故雖然這些腳本都是使用 root 的名義在運行,它們並無法完成所有 root 使用者能做的事情。舉例來說,在容器內的腳本並沒有權限去要求重新開機、或者檢查其他容器內的 process。相對的,當某個容器真的有需要使用到較多的權限時,則可以在 docker run
時加入 --cap-add
及 --privileged
等選項來運行。
kubernetes
在 k8s 上最小的運行單位為 pod,但透過對 k8s object 的設定可以選擇將權限限縮在 pod 上面、或是針對特定的容器。透過 securityContext
即可設定對應的 pod 以特定的使用者、群組來運行。而我們也可以將 securityContext
移動到 containers
裏面以將權限的設定僅止於套用在特定的容器上。