以非root使用者執行Docker容器
當您在Docker容器內執行應用程式時,預設情況下它擁有所有root許可權。您可能已經注意到,當您開啟Ubuntu Docker容器的Bash時,預設情況下您以root使用者身份登入。這在應用程式安全性方面可能是一個主要問題。任何外部人員都可以濫用這一點併入侵整個容器以及在Docker容器內執行的所有其他檔案和應用程式。因此,儘可能以非root使用者執行大多數瑣碎的操作非常重要。
在本文中,我們將討論兩種以非root使用者訪問Docker容器的方法。
將使用者新增到Docker組
您可以嘗試透過將使用者新增到Docker組來以非root使用者執行Docker容器。如果沒有Docker組,您可以隨時建立一個。
您可以使用以下命令建立Docker組。
sudo groupadd docker
如果您的本地機器中已經存在Docker組,則以下命令的輸出將是:
groupadd: group 'docker' already exists
建立Docker組後,您現在可以使用以下命令新增非root使用者。
sudo usermod −aG docker [non−root user]
要驗證組成員身份,您需要重新登入到Docker。
使用Dockerfile
另一種更簡單的使用非root使用者訪問Docker容器的解決方案是在Dockerfile中指定指令。Docker允許您使用-u標誌以及useradd命令新增使用者,然後使用USER指令,您可以決定在啟動與映像關聯的Docker容器時要以哪個使用者身份登入。
檢視下面的Dockerfile。
#Pull the base image as Ubuntu FROM ubuntu:latest #Add a user with userid 8877 and name nonroot RUN useradd −u 8877 nonroot #Run Container as nonroot USER nonroot
在上面的Dockerfile中,Ubuntu是從Docker登錄檔中提取的基本Docker映象。useradd命令以及-u標誌使用Docker RUN指令新增具有指定名稱和ID的使用者。USER指令用於指定在執行與該映象關聯的Docker容器時要登入的使用者。
要使用上述Dockerfile構建Docker映象,您可以使用以下Docker Build命令。
sudo docker build −t my−image .
執行與Docker映象關聯的Docker容器。
sudo docker run −it my−image bash
這將開啟ubuntu容器的bash。要驗證您是否已以非root使用者身份登入,可以使用id命令。
id
您會發現Docker容器的使用者和組現在已更改為您在Dockerfile中指定的非root使用者。
大多數Docker使用者要麼忘記,要麼認為沒有必要更改其使用者許可權並切換到非root使用者。這是一種不好的做法,並且當應用程式部署並公開時,始終構成威脅。它不僅會對該特定應用程式構成威脅,而且透過該應用程式,駭客可以操縱執行該應用程式的Docker容器的整個檔案系統以及可能部署在同一Docker容器內的其他重要應用程式。
在本文中,我們看到了兩種不同的方法,您可以透過這些方法將當前使用者切換為非root使用者。方法2中討論的過程更好且使用更廣泛,因為幾乎所有Docker應用程式都需要Dockerfile來維護容器,並且只需使用兩個簡單的附加語句,您就可以進行切換。