SpringBoot 2 与 Docker - 安全方面

就像传统的 VM 部署一样,不应该使用 root 权限运行进程。相反,镜像应包含运行该应用的非 root 用户。

Dockerfile 中,这可以通过添加另一层来添加(系统)用户和组,然后将其设置为当前用户(而不是默认用户 root)来实现:

Dockerfile

FROM openjdk:8-jdk-alpine

RUN addgroup -S demo && adduser -S demo -G demo
USER demo

...

如果有人设法突破我们的应用并在容器内运行系统命令,这将限制他们的能力(最小权限原则)。

一些其他的 Dockerfile 命令仅以 root 用户身份运行,因此也许我们必须将 USER 命令进一步向下移动(例如,如果我们计划将更多只能以 root 用户身份操作的软件包安装到容器中)。

不使用 Dockerfile 的其他方法可能更合适。例如,在稍后描述的 buildpack 方法中,大多数实现默认情况下将使用非 root 用户。

另一个考虑因素是,大多数应用在运行时可能不需要完整的 JDK,因此一旦我们进行了多阶段构建,我们就可以安全地切换到 JRE 基础镜像。因此,在上面的多阶段构建中,我们可以使用

Dockerfile

FROM openjdk:8-jre-alpine

...

以获得最终的可运行图像。如前所述,这还将节省镜像中的一些空间,这些空间原本是被运行时不需要的工具占用。

发布了231 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/stevenchen1989/article/details/105356427