💡
原文英文,约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。
➡️