第6天 — 审计

发布: (2025年12月6日 GMT+8 17:00)
5 min read
原文: Dev.to

Source: Dev.to

Gord 在村庄边缘停下,点了点头指向 Rothütle 的背包。

“你的包挺重的,”她说。“而且很吵。让我检查一下。”

Rothütle 犹豫道:“那只是我的东西。”

“在深林里,”她跪在一块长满苔藓的石头旁回答,“重量会拖慢你——噪音会吸引不该来的注意。”

他不情愿地把背包递过去。Gord 以冷静而精准的方式检查里面的物品:一本笔记本、备用衬衫、墨水瓶、三支笔,以及一个精心包好的糕点。

她抬起糕点。

“提振士气,”他递上。
“喂动物,”她把它放到一旁说,“还有可能更糟。”

她逐一取出任何可能晃动、碎裂、泄漏或留下痕迹的东西。

“森林中被腐化的部分会利用你携带的东西对付你,”她补充道。“而 Jack 知道如何通过痕迹追踪。”

Rothütle 看着自己的背包变得异常轻盈。

“我感觉暴露了。”
“很好,”Gord 回答,重新打包只留下必要的东西。“沉默的负担能让你活下来。”

每日小贴士:去除不必要的组件可以让你的镜像更安全。

安全提示 #6 — 镜像硬化

Gord 的审计就是镜像硬化的故事版:减轻重量,降低噪音,降低风险。

容器内部的每一个不必要的包都会变成:

  • 需要打补丁的额外依赖,
  • 隐藏漏洞的额外空间,
  • 攻击者可以利用的额外线索,帮助他们了解你的系统。

正如 Gord 减轻了 Rothütle 的负担,镜像硬化也在削减你的容器攻击面

如何硬化你的镜像

  • 最小化基础镜像开始(distroless、slim、Alpine、Docker Hardened Images)。
  • 使用多阶段构建,让只有编译产物进入最终镜像。
  • 删除“以防万一”工具——除非绝对需要,否则不要留 shell、curlpingnano
  • 更倾向于使用重新构建的干净镜像而不是打补丁的镜像。
  • 定期扫描镜像。

示例 1:Docker Hardened Images

FROM gord/dhi-python:3.13

# Copy only necessary application files
COPY app/ /app/
WORKDIR /app/
CMD ["python", "main.py"]

DHI 是 Docker 维护的一套近零 CVE 基础镜像,专为生产工作负载设计。

示例 2:Alpine 最小化基础镜像

FROM alpine:3.19
# Install only the package needed to run the app, then remove build cache
RUN apk --no-cache add python3

# Copy the application
COPY app/ /app/
WORKDIR /app/
CMD ["python3", "main.py"]

Alpine Linux 是一个体积小、注重安全的发行版,常用于最小化容器镜像。

示例 3:多阶段构建

# Stage 1: The Build Stage (contains heavy build tools)
FROM golang:1.21-alpine AS builder
WORKDIR /src
COPY . .
RUN go build -o /usr/local/bin/myapp ./cmd/

# Stage 2: The Final Runtime Stage (minimal, hardened)
FROM alpine:3.19
# Copy only the compiled binary from the builder stage
COPY --from=builder /usr/local/bin/myapp /usr/local/bin/myapp
# No shell or Go dependencies are carried over, only the single binary.
CMD ["/usr/local/bin/myapp"]

安静的镜像就像安静的旅行者:更难被发现,更难被利用,也更具韧性。

第 7 天预告 — 深入黑暗

明天,Gord 和 Rothütle 将离开 Oberried,踏入真正的森林——光线变薄,阴影加深,Gord 正在为她的刀进行一次 Rothütle 从未见过的仪式。

而有东西正从松林之间注视着他们。

Back to Blog

相关文章

阅读更多 »