你应该知道的7个Dockerfile安全提示

你应该知道的7个Dockerfile安全提示

💡 原文英文,约600词,阅读约需3分钟。
📝

内容提要

我开发了一个工具来检测Dockerfile中的安全漏洞,并总结了常见的错误配置及其避免方法,包括:避免使用默认或最新镜像、不要以root用户运行容器、不要在ENV中存储秘密、避免在RUN命令中使用ARG变量、不要直接将curl或wget输出传递给shell、不要暴露不安全的端口(如22),以及在仅需复制文件时使用COPY而非ADD。这些规则已集成到我的Dockerfile linter插件中。

🎯

关键要点

  • 开发了一个工具来检测Dockerfile中的安全漏洞。
  • 避免使用默认或最新镜像,以确保可重复性和安全性。
  • 不要以root用户运行容器,以减少攻击面和特权升级的风险。
  • 不要在ENV中存储秘密,以防敏感数据被提取。
  • 避免在RUN命令中使用ARG变量,以防止恶意代码注入。
  • 不要直接将curl或wget输出传递给shell,以避免执行未经验证的代码。
  • 避免暴露不安全的端口(如22),以防止未经授权的访问。
  • 在仅需复制文件时使用COPY而非ADD,以简化构建过程。
  • 这些规则已集成到Dockerfile linter插件中,帮助自动检测问题。

延伸问答

如何避免在Dockerfile中使用默认或最新镜像?

应始终指定版本标签,避免使用默认或最新镜像,以确保可重复性和安全性。

为什么不应该以root用户运行Docker容器?

以root用户运行容器会增加攻击面,可能导致特权升级和对主机的访问风险。

在Dockerfile中存储秘密的风险是什么?

将秘密存储在ENV中会使其保存在镜像层中,任何访问镜像的人都可以提取这些秘密。

为什么在RUN命令中使用ARG变量是不安全的?

ARG变量可以在构建时被覆盖,攻击者可能通过CI/CD系统注入恶意代码。

如何安全地使用curl或wget命令?

避免将curl或wget的输出直接传递给shell,以防执行未经验证的代码。

在Dockerfile中使用COPY和ADD有什么区别?

COPY用于简单地复制文件,而ADD提供额外功能,如解压缩和从URL下载,通常不建议在不需要这些功能时使用ADD。

➡️

继续阅读