阿拉平平
读完需要
分钟
速读仅需 2 分钟
这篇文章[1] 来自于 Cloudberry Engineering,作者总结了在编写 Dockerfile 时有哪些安全的注意点,并开源了一个清单[2] 用来检测 Dockerfile 是否符合规则。我整理了原文,并对部分内容做了精简。由于自己水平有限,文中难免有疏漏错误之处,欢迎大家在留言区指正,以下是正文。
※※※
容器安全虽然是一个很宽泛的问题,但其实有很多小技巧可以帮助我们降低使用的风险。编写 Dockerfile 时遵循一些规则就是一个很好的出发点。
1. 不要在环境变量中存储保密字典
使用 ENV 存储 secrets 则是一种糟糕的做法,因为 Dockerfile 通常会和应用一起发布,所以这样就和把 secrets 硬编码到代码里没区别了。
2. 仅使用受信任的基础镜像
很明显,罪魁祸首就是所用的基础镜像。使用不可信的基础镜像会带来很高的风险,应尽量避免。
Docker 为大多数操作系统和应用提供了官方的基础镜像。使用它们,可以最大程度地降低被破坏的风险。
3. 不要使用 latest 作为基础镜像的标签
使用 latest 作为标签会隐性地继承升级包,这种情况轻则可能会影响应用的可靠性,重则可能引入漏洞。
4. 避免执行 curl
wget https://cloudberry.engineering/absolutely-trustworthy.sh | sh
使用受信任的源
使用一个安全链接
验证下载内容的真实性和完整性
5. 不要升级你的系统
进行升级并使用 latest 作为基础镜像的标签,会增加依赖树的不可预测性。
你要做的就是固定基础镜像的版本,仅执行 apt/apk update。
6. 尽量不要使用 ADD 指令
ADD https://cloudberry.engineering/absolutely-trust-me.tar.gz
从安全的角度来看,我给出同样的建议:不要用 ADD。先获取所需的内容,验证好再使用 COPY 指令。如果非用不可,请使用安全链接访问受信任的源。
7. 不要使用 root 用户运行
所以不要忽略以 root 用户身份运行所带来的风险。
因此,最好始终指定一个普通用户:
USER hopefullynotroot
请注意,在 Dockerfile 显示设置用户只是一层防护,并不能解决整个运行问题。
相反,我们可以也应该采用深度防御的方案,并在整个堆栈中进一步降低风险:严格配置 Docker 的守护进程或者使用无 root 用户的容器,限制运行时的配置(可以的话,设置 –privileged 参数)等。
8. 不要使用 sudo 命令
既然不使用 root 用户,那么也不应该使用 sudo 命令。
即使你使用的是普通用户,也请检查下 sudoers 文件,确保该用户没有特权。
References
[1]
文章: https://cloudberry.engineering/article/dockerfile-security-best-practices/
[2]
清单: https://github.com/gbrindisi/dockerfile-security
原文始发于微信公众号(阿拉平平):Dockerfile 安全最佳实践
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/287913.html