返回到文章

采纳

编辑于

Docker镜像设定最小权限的USER

docker
docker

如果 Dockerfile 中没有指定 USER ,Docker 默认将会以超级用户 root 的身份运行容器,容器所属的命名空间(namespace)因此映射为 root 所有,这意味着容器有可能获取 Docker 宿主机的超级管理权限。不仅如此,以 root 用户身份运行容器,还扩大了攻击面,如果容器应用中存在安全漏洞,很容易造成权限提升。

在实践中,一般不需要容器拥有 root 权限。为了尽量降低安全威胁,创建专门的用户和用户组,在 Dockerfile 中使用 USER 指定用户,确保以最小权限的用户身份运行容器应用。

如果基础镜像中不包含专门的用户,那么就在 Dockerfile 中直接创建。下面就是一个这样的例子,它用到的基础镜像是 Ubuntu :

FROM ubuntu
RUN mkdir /app
RUN groupadd -r test && useradd -r -s /bin/false -g test test
WORKDIR /app
COPY ./app
RUN chown -R test:test /app
USER test
CMD node index.js

在上例中:

  • 创建一个系统用户( -r 选项),没有密码、没有主目录且没有 shell;
  • 将该用户添加到前面(使用 groupadd )创建的用户组;
  • 最后一段参数设定了用户名以及所属的用户组。