Docker特权模式:你应该运行特权Docker容器吗?

2021年11月20日18:31:20 发表评论 5,979 次浏览

Docker特权模式使用介绍

Docker 特权是这个强大的虚拟化平台的众多有用功能之一。在开始在特权模式下工作之前,请确保你了解它的工作原理。

Docker如何使用特权模式?在本教程中,你将了解什么是特权 Docker 容器、何时使用它们以及它是否适合你。

什么是 Docker 特权模式?

是否应该运行Docker特权模式?Docker 特权模式向主机系统上的所有设备授予 Docker 容器根功能。在特权模式下运行容器赋予它主机的功能。例如,它使其能够修改 App Arm 和SELinux 配置。

借助主机的内核功能和设备访问权限,你甚至可以在特权容器内安装 Docker 平台的新实例。本质上,这种模式允许在 Docker 中运行 Docker。

Docker特权模式:你应该运行特权Docker容器吗?

注意:在 Docker Image Vs Container: The Major Differences 中了解有关 Docker 容器的更多信息以及它们与Docker 映像的区别。

如何检查容器是否有特权?

要检查你是否在特权模式下运行容器,请使用以下命令:

docker inspect --format='{{.HostConfig.Privileged}}' [container_id]

如果容器具有特权,则输出响应为true,如下图所示。

Docker特权模式:你应该运行特权Docker容器吗?

另一方面,如果容器没有特权,则输出会显示消息false

Docker特权模式:你应该运行特权Docker容器吗?

Docker如何使用特权模式?

通过将--privileged选项添加到运行命令,指示 Docker 以特权模式运行容器:

sudo docker run --privileged [image_name]

Docker特权模式使用介绍:Docker 特权示例

要在特权模式下(以交互方式)运行 Ubuntu 容器,你可以使用:

sudo docker run -it --privileged ubuntu

要测试容器是否可以访问主机,你可以尝试创建一个临时文件系统(tmpfs)并将其挂载到/mnt

mount -t tmpfs none /mnt

现在,使用以下命令列出磁盘空间统计信息(以人类可读的格式):

df -h

新创建的文件系统应出现在列表中,如下图所示。

Docker特权模式:你应该运行特权Docker容器吗?

为什么运行特权容器不安全?

Docker如何使用特权模式?就像 Ubuntu 不鼓励以 root 用户身份使用系统一样,Docker 也是如此。将主机的内核和硬件资源暴露于任何外部网络攻击始终是对系统的潜在威胁。

因此,不建议在生产环境中使用特权容器

通过特权容器可能的违规行为

Docker特权模式使用介绍:拥有特权容器对任何组织来说都是一种安全风险。它为恶意用户创造了控制系统的机会。

允许容器根访问系统上的所有内容为网络攻击打开了机会之窗。网络攻击者可以从容器连接到主机并危及已建立的基础设施和配置。

最常见的情况是合法用户滥用给定权限进行恶意活动。

如何最小化 Docker 容器提权?

是否应该运行Docker特权模式?防止 Docker 容器提权的最好方法是根本不使用特权容器。

但是,如果你正在运行需要以 root 用户身份执行的应用程序,则有一种方法可以最大程度地减少恶意活动的机会。这是通过用户命名空间重新映射完成的,将特定容器的用户重新映射到 Docker 主机上权限较低的用户。本质上,容器将用户视为 root,而主机则不然。

重新映射包括分配一系列在容器(命名空间)内作为普通 UID 运行的 UID,从 0 到 65536,但在主机上没有特权。两个文件管理用户配置——一个用于用户 ID 范围 ( /etc/subuid ),另一个用于组 ID 范围 ( /etc/subgid )。

默认情况下,docker使用dockremap用户和组进行重新映射。

注意:有关使用 Docker 容器的更多详细信息,请参阅管理 Docker 容器的最佳实践。

结论

阅读本文的Docker特权模式使用介绍后,你应该知道运行特权 Docker 容器并不是最安全的选择。但是,如果你无法避免这样做,请确保保护主机以防止潜在的破坏。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: