Docker镜像设定最小权限的USER

半兽人 发表于: 2020-03-16   最后更新时间: 2024-03-29 19:17:43  
{{totalSubscript}} 订阅, 2,896 游览

如果 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 )创建的用户组;
  • 最后一段参数设定了用户名以及所属的用户组。
更新于 2024-03-29

查看docker更多相关的文章或提一个关于docker的问题,也可以与我们一起分享文章