以非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来维护容器,并且只需使用两个简单的附加语句,您就可以进行切换。

更新于:2020年10月27日

6K+浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告