Dockerfile安全
Dockerfile是包含用于组合镜像命令的文本文件,一般由基础镜像信息(FROM)、维护者信息(MAINTAINER)、镜像操作指令(RUN、ADD、COPY等)和容器启动时执行指令(CMD等)四个部分组成,Docker可通过读取Dockerfile中的命令创建容器镜像。Dockefile文件是提供给用户的参考样例文件,用户在此基础上修改后,需要注意Dockerfile中安装第三方软件的安全问题。
- 用户请勿在容器内开启ssh服务。
- 在容器内使用非root用户运行。
- 仅授予用户必要的capability,避免高权限用户造成容器逃逸等安全风险。
- 将容器端口绑定到所需主机端口上特定的主机接口。
- 启用apparmor能力:运行容器时可指定apparmor文件,apparmor能够提供安全策略,保护Linux系统和应用程序。启用apparmor能力前需要先开启Linux内核的apparmor功能。
- 启用SELinux能力:运行容器时可指定SELinux配置,提高安全性。启用SELinux能力前需要使用--selinux-enabled配置在Docker守护进程中生效。
- 经常扫描和重建镜像,及时加入安全补丁。
- 确认Dockerfile中ADD操作的文件为可信文件。
- 不在Dockerfile中存储敏感信息。
- 在镜像内加入健康检测。
- 不要单独或者在单行命令中使用update更新指令。
- 建议添加一个“--read-only”标志,使容器的根文件系统以只读方式挂载,可以与容器卷组合使用,强制容器的进程只写入将被持久化的位置。例如:
docker run --interactive --tty --read-only --volume /centdata centos /bin/bash
这将运行具有只读根文件系统的容器,并将使用‘centdata’作为写操作的容器卷。
- 建议容器使用单独的磁盘分区,避免耗尽主机的磁盘空间,导致系统异常。
- 避免在容器中挂载docker.sock。
- 避免在容器中运行不可信的应用。
- 避免在容器中侦听不必要的端口。
- 将容器的根文件系统挂载为只读模式。
- 为容器设置系统资源的配额,避免容器占用过多的系统资源,导致资源耗尽。系统资源包括但不限于CPU、内存。
- 容器服务对外侦听的业务接口启用认证和加密传输机制,保证业务数据不被窃取。
- 避免共享命名空间,包括网络命名空间、UTS命名空间、user命名空间。
- 避免容器部署时通过环境变量、ConfigMap等传递敏感信息,以防止敏感数据泄露。
父主题: 容器安全加固