基于阿里云最佳安全实践的Docker基线标准

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Docker安全基线标准

审核Docker文件和目录

描述

除了审核常规的Linux文件系统和系统调用之外,还审核所有与Docker相关的文件和目录。 Docker守护程序以“ root”特权运行。 其行为取决于某些关键文件和目录。如 /var/lib/docker、/etc/docker、docker.service、 docker.socket、/usr/bin/docker-containerd、/usr/bin/docker-runc等文件和目录

加固建议

在/etc/audit/audit.rules与/etc/audit/rules.d/audit.rules文件中添加以下行:

-w /var/lib/docker -k docker
-w /etc/docker -k docker
-w /usr/lib/systemd/system/docker.service -k docker
-w /usr/lib/systemd/system/docker.socket -k docker
-w /usr/bin/docker-containerd -k docker
-w /usr/bin/docker-runc -k docker

然后,重新启动audit程序。 例如

service auditd restart

限制容器之间的网络流量

描述

默认情况下,同一主机上的容器之间允许所有网络通信。 如果不需要,请限制所有容器间的通信。 将需要相互通信的特定容器链接在一起。默认情况下,同一主机上所有容器之间都启用了不受限制的网络流量。 因此,每个容器都有可能读取同一主机上整个容器网络上的所有数据包。 这可能会导致意外和不必要的信息泄露给其他容器。 因此,限制容器间的通信。

加固建议

在守护程序模式下运行docker并传递'--icc = false'作为参数。
例如,

/usr/bin/dockerd --icc=false

若使用systemctl管理docker服务则需要编辑

/usr/lib/systemd/system/docker.service

文件中的`ExecStart`参数添加 `--icc=false`选项
然后重启docker服务

systemctl daemon-reload
systemctl restart docker

不要使用特权容器

描述

使用--privileged标志将所有Linux内核功能赋予容器,从而覆盖--cap-add和--cap-drop标志。 确保不使用它。 --privileged标志为容器提供了所有功能,并且还解除了设备cgroup控制器强制执行的所有限制。 换句话说,容器可以完成主机可以做的几乎所有事情。 存在此标志是为了允许特殊用例,例如在Docker中运行Docker

加固建议

不要使用`--privileged`标志运行容器

不要在容器上挂载敏感的主机系统目录

描述

不允许将以下敏感的主机系统目录作为容器卷挂载,尤其是在读写模式下。 /boot /dev /etc /lib /proc /sys /usr 如果敏感目录以读写模式挂载,则可以对那些敏感目录中的文件进行更改。 这些更改可能会降低安全隐患或不必要的更改,这些更改可能会使Docker主机处于受损状态。 如果您是k8s或其他容器编排软件编排的容器,请依照相应的安全策略配置或忽略。

加固建议

不要在容器上挂载主机敏感目录,尤其是在读写模式下

限制容器的内存使用量

描述

默认情况下,Docker主机上的所有容器均等地共享资源。 通过使用Docker主机的资源管理功能(例如内存限制),您可以控制容器可能消耗的内存量。 默认情况下,容器可以使用主机上的所有内存。 您可以使用内存限制机制来防止由于一个容器消耗主机的所有资源而导致的服务拒绝,从而使同一主机上的其他容器无法执行其预期的功能。 对内存没有限制可能会导致一个问题,即一个容器很容易使整个系统不稳定并因此无法使用。

加固建议

仅使用所需的内存来运行容器。 始终使用'--memory'参数运行容器。 您应该按以下方式启动容器:

docker run --interactive --tty --memory 256m

不共享主机的进程名称空间

描述

进程ID(PID)命名空间隔离了进程ID号空间,这意味着不同PID命名空间中的进程可以具有相同的PID。 这是容器和主机之间的进程级别隔离。 PID名称空间提供了流程分离。 PID命名空间删除了系统进程的视图,并允许进程ID重复使用,包括PID1。如果主机的PID命名空间与容器共享,则它将基本上允许容器内的进程查看主机上的所有进程。 系统。 这破坏了主机和容器之间的进程级别隔离的好处。 有权访问容器的人最终可以知道主机系统上正在运行的所有进程,甚至可以从容器内部杀死主机系统进程。 这可能是灾难性的。 因此,请勿与容器共享主机的进程名称空间。

加固建议

不要使用'--pid = host'参数启动容器。

将容器的根文件系统挂载为只读

描述

容器的根文件系统应被视为“黄金映像”,并且应避免对根文件系统的任何写操作。 您应该显式定义用于写入的容器卷。 您不应该在容器中写入数据。 属于容器的数据量应明确定义和管理。 在管理员控制他们希望开发人员在何处写入文件和错误的许多情况下,这很有用。

加固建议

添加"--read-only"标志,以允许将容器的根文件系统挂载为只读。 可以将其与卷结合使用,以强制容器的过程仅写入要保留的位置。
您应该按以下方式运行容器:

docker run --interactive --tty --read-only --volume

如果您是k8s或其他容器编排软件编排的容器,请按照相应的安全策略配置或忽略。

确保docker.sock不被挂载

描述

docker.sock挂载的容器容易被获取特殊权限,一旦危险进入到docker中,严重影响了宿主机的安全

加固建议

按照提示<image name><container name>查找启动的docker容器  ,
以非docker挂载docker.sock的形式重新启动容器           

docker stop

docker run [OPTIONS] 或docker run [OPTIONS]

为Docker启用内容信任

描述

默认情况下禁用内容信任。 您应该启用它。 内容信任提供了将数字签名用于发送到远程Docker注册表和从远程Docker注册表接收的数据的功能。 这些签名允许客户端验证特定图像标签的完整性和发布者。 这确保了容器图像的出处

加固建议

要在bash shell中启用内容信任,请输入以下命令:`export DOCKER_CONTENT_TRUST=1`
或者,在您的配置文件中设置此环境变量,以便在每次登录时启用内容信任。
内容信任目前仅适用于公共Docker Hub的用户。 当前不适用于Docker Trusted Registry或私有注册表。

确认Docker相关的文件具有合适的权限

描述

确保可能包含敏感参数的文件和目录的安全对确保Docker守护程序的正确和安全运行至关重要

加固建议

执行以下命令为docker相关文件配置权限:

chown root:root /usr/lib/systemd/system/docker.service
chmod 644 /usr/lib/systemd/system/docker.service
chown root:root /usr/lib/systemd/system/docker.socket
chmod 644 /usr/lib/systemd/system/docker.socket
chown root:root /etc/docker
chmod 755 /etc/docker

# 若文件路径与实际系统中不同可以使用以下命令获取文件路径:

systemctl show -p FragmentPath docker.socket
systemctl show -p FragmentPath docker.service

不要使用aufs存储驱动程序

描述

aufs存储驱动程序是最早的存储驱动程序。 它基于Linux内核补丁集,该补丁集不太可能合并到主要Linux内核中。 还已知aufs驱动程序会导致一些严重的内核崩溃。 'aufs'刚刚获得了Docker的支持。 最重要的是,许多使用最新Linux内核的Linux发行版都不支持aufs驱动程序。

加固建议

不要明确使用aufs作为存储驱动程序。例如,请勿按以下方式启动Docker守护程序:若以systemctl管理docker服务则需要编辑/usr/lib/systemd/system/docker.service的ExecStart参数删除--storage-driver aufs重启docker服务

systemctl daemon-reload
systemctl restart docker

允许Docker对iptables进行更改

描述

iptables用于在Linux内核中设置,维护和检查IP数据包过滤器规则表。 允许Docker守护程序对iptables进行更改。 如果您选择这样做,Docker将永远不会对您的系统iptables规则进行更改。 如果允许,Docker服务器将根据您为容器选择网络选项的方式自动对iptables进行所需的更改。 建议让Docker服务器自动对iptables进行更改,以避免网络配置错误,这可能会妨碍容器之间以及与外界的通信。 此外,每次选择运行容器或修改网络选项时,它都可以避免更新iptables的麻烦。

加固建议

不使用--iptables = false参数运行Docker守护程序。 若以systemctl管理docker服务则需要编辑/usr/lib/systemd/system/docker.service的ExecStart参数删除--iptables = false
重启docker服务

systemctl daemon-reload
systemctl restart docker

设置日志记录级别

描述

设置适当的日志级别,将Docker守护程序配置为记录您以后想要查看的事件。 基本日志级别为“ info”及更高版本将捕获除调试日志以外的所有日志。 直到且除非有必要,否则您不应在“debug”日志级别运行Docker守护程序

加固建议

# 运行Docker守护程序,如下所示:

dockerd --log-level=info

# 若以systemctl管理docker服务则需要编辑`/usr/lib/systemd/system/docker.service`的ExecStart参数添加`--log-level="info"`,并重启docker

systemctl stop docker
systemctl start docker

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
3月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
761 109
|
2月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1590 9
|
2月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
264 99
|
10月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
843 90
|
8月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
360 16
|
8月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
296 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
Kubernetes Linux Docker
容器化技术Docker入门与实践
容器化技术Docker入门与实践
189 20
|
12月前
|
安全 持续交付 Docker
深入理解并实践容器化技术——Docker 深度解析
深入理解并实践容器化技术——Docker 深度解析
474 2
|
12月前
|
持续交付 开发者 Docker
深入理解并实践容器化技术——Docker篇
深入理解并实践容器化技术——Docker篇
275 0
|
存储 运维 Kubernetes
Docker实践,来自沪江、滴滴、蘑菇街架构师的经验之谈
架构师小组交流会:每期选一个时下最热门的技术话题进行小组交流。 第一期主题:容器实践。Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化、可移植性是CI/CD,DevOps,微服务的重要实现技术。但目前技术还不够成熟,在生产实践中会遇到不少坑。本期参与小组交流的是国内较早采用 Docker 实践的公司。 参与嘉宾:沪江架构师黄凯、滴滴架构师田智伟、蘑菇街架构师张振华、蘑菇街运维架构师向靖、七牛技术总监袁晓沛、扇贝技术总监丁彦
304 0