容器安全最佳实践:保护 Docker
在容器化方面,Docker 很容易成为最广泛采用的技术。随着行业中的企业和用户希望使用容器来降低成本、扩展服务并简化众多应用程序的实施,一个不应忽视的重要方面是 Docker 的安全性。Docker 通常被认为比传统部署更安全,虽然 Docker 确实如此,但我们仍然必须意识到潜在的安全漏洞,以防止利用如此强大的工具。
在本教程中,我们将介绍 Linux 系统上 Docker 的一些最重要的安全措施。这些是系统管理员应遵守的最佳实践,以确保他们在 Docker 中的容器化应用程序免受潜在漏洞和恶意用户的侵害。
在本教程中,您将学习:
- 在 Linux 上保护 Docker 的 5 大最佳实践
Docker 安全最佳实践
下面,我们将盘点 5 条最重要的建议,以确保 Docker 环境及其容器化应用程序的安全。
Docker 是做什么用的?
Docker 是容器化领域的大名鼎鼎,尽管还有许多其他工具也可以完成这项工作。许多 Linux 管理员开始使用 Docker 来构建应用程序,这些应用程序可以打包到容器中并轻松部署在任何系统上。这也是开发人员共享其工作的好方法,因为任何使用 Docker 的人都可以运行该应用程序。
1. 避免使用 root 权限
Linux 用户应该已经尝试尽可能减少使用管理权限。这已经是 Linux 系统的黄金法则,其中 root 账户应该专门用于执行普通用户账户无法实现的重要任务和命令。
相同的规则适用于 Docker 容器。开发人员有时会懒惰或随意地为 Docker 化应用程序分配不必要的权限,而不是花时间准确决定哪些权限是必要的并相应地委派它们。如果用户设法控制应用程序,有效地让他们自由控制环境,那么这种疏忽可能会产生可怕的后果。
我们可以通过确保不以 root 身份运行容器(在 Dockerfile 中验证 USER 以确保这一点)来绕过这个陷阱,并避免使用 --id 0 或 --privileged 等选项执行容器。在大多数情况下,我们还可以避免以 root 身份运行 Docker 本身,尽管这并不像上述几点那样重要的预防措施。
2. 定期更新 – 谨慎
Docker 镜像的更新通常是一件好事。它们引入了新功能、安全补丁等。因此,通常建议定期获取更新并使所有 Docker 镜像保持最新。但是,在正常运行时间极其重要的敏感环境中,可以采取额外的措施来预先暂存这些更改,然后再将其部署到生产环境中。
尽管更新通常是一件好事,但它们也可能引入尚未解决问题的重大更改或不稳定的功能。在利用许多 Docker 容器并需要额外注意确保正常运行时间的环境中,我们可以利用 Kubernetes 等技术,这将使我们能够逐步推出 udpdates 并监控应用程序是否有错误,以防我们需要中止更新和回滚。
Смотритетакже: Kubernetes 与 Docker,有什么区别?
3. 使用官方图片
尽可能选择使用 Docker Hub 上提供供下载的官方映像。这些映像会定期接收更新,并由 Docker 社区中的开发人员运行,因此通常比其他网站上其他用户维护的映像更可靠,使用寿命更长。
例如,NGINX 或 Ubuntu 等常见应用程序在 Docker Hub 上提供了官方映像。使用它们非常简单,因为默认情况下,此功能已经内置到 Docker 中:
Pull an official nginx image from Docker Hub:
docker pull nginx:latest
上面显示的相同命令也可用于更新映像。
4. 限制容器功能
此建议与我们的第一个建议齐头并进,即避免使用 root 权限。出于同样的原因,我们还应该以尽可能的方式限制 Docker 容器的功能。容器通常应仅使用正确执行其作业所需的最低权限运行。由于 Docker 应用程序通常具有非常特定的角色,因此我们可以非常精确地分配功能。
限制能力的一种方法是使用 --internal 标志。这可以防止 Docker 容器访问内部网络之外的任何内容,这通常不是我们需要委派的必要权限。因此,Docker 容器仍然可以相互通信(如果配置正确),但不能与主机系统的外部网络通信。对于已配置为通过代理访问的 Docker 应用程序,--internal 标志是可以一直使用的东西。
--cap-drop=ALL 选项会将 Linux 功能降低到最低限度,而许多应用程序不需要。我们可以将此选项与 --cap-add=NET_BIND_SERVICE 等其他选项结合使用,以将服务绑定到特定端口,而无需 root 权限。
5. 使用 Docker Bench Security 进行安全审计
Docker 的开发人员知道,它是一个复杂的应用程序,需要保护许多方面。期望每个 Linux 管理员都足够熟悉 Docker 以检查每个设置是否存在潜在的安全缺陷,这太过分了。
这就是 Docker Bench Security 存在的原因,它来自官方 Docker GitHub,并将对您的 Docker 设置进行安全审计。它实质上是执行一组 Bash 脚本,这些脚本对环境的安全性执行各种检查,然后报告发现的威胁以及可以采取的措施来强化您的设置。
这就像克隆存储库然后执行脚本一样简单:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh
结束语
在本教程中,我们介绍了在 Linux 系统上保护 Docker 的五大最佳实践列表。尽管 Docker 是一项相对较新的技术,但我们发现它的许多最佳实践与传统 Linux 系统上采用的最佳实践相似,例如功能限制、安全审计工具、安装更新和使用受信任的软件。使用 Docker 本身以及这些主要建议将有助于通过比传统部署更能最大限度地减少攻击面来确保应用程序的安全。
