docker privileged作用是什么 | docker privileged原理 24

作者 : 慕源网 本文共2664个字,预计阅读时间需要7分钟 发布时间: 2021-12-15 共317人阅读

docker privileged作用

Docker Privileged是 Docker 中“docker run”命令的一个选项。因为出于安全原因,容器不允许访问任何设备,Docker Privileged让docker 应用容器获取宿主机root权限(特殊权限-),允许我们的 Docker 容器访问连接到主机的所有设备(位于 /dev 文件夹下)。容器获得所有能力,可以访问主机的所有设备,例如,CD-ROM、闪存驱动器、连接到主机的硬盘驱动器,甚至在Privileged模式下运行时访问网络摄像头,但是,我们可以使用其他不同的限制访问’docker run’ 命令中可用的选项。此功能是在 Docker 0.6 中添加的

docker privileged作用是什么 | docker privileged原理 24

语法:

docker run --privileged [OPTIONS] <docker_image>

OPTIONS

–cap-add:我们可以使用此选项向容器添加其他功能

–cap-drop:我们可以限制容器的附加功能

注意:我们在“docker run”命令中确实有其他选项可用,但除了“–privileged”选项之外,我们还可以使用这些选项。

docker privileged作用是什么 | docker privileged原理 24

在上面的快照中,我们只是检查Privileged选项是否正常工作。

docker privileged函数原理

正如我们所知,Privileged模式允许访问连接到主机的所有设备,就像使用这些设备或资源的主机一样。它实际上允许访问所有连接的设备,并在 AppArmor 或 SELinux 中进行一些配置更改,允许容器对主机具有几乎与在主机上的容器外运行的进程相同的访问权限。

例子

让我们通过下面的例子来了解Privileged模式的工作过程:

场景一:

让我们运行一个非Privileged容器和一个Privileged容器,并尝试在容器内挂载磁盘来存储数据。因此,假设我们有两个磁盘连接到我们的主机,我们希望将第二个磁盘安装到容器上,以存储容器内运行的应用程序产生的数据。

1. 非Privileged容器

第 1 步 –使用如下所示的命令运行没有Privileged选项的容器: –

docker run -it --rm <Docker_Image> sh
docker run -it --rm ubuntu sh

在上面的快照中,我们可以看到一个容器已经使用 ‘ubuntu’ Docker 镜像启动并连接到容器。我们还使用了 ‘-rm’ 选项,一旦我们退出,它就会删除容器。适合测试目的。

docker privileged作用是什么 | docker privileged原理 24

步骤 2 –现在,尝试使用“fdisk”列出可用磁盘,如下所示:

fdisk -l

docker privileged作用是什么 | docker privileged原理 24

在上面的快照中,我们可以看到它没有显示任何磁盘,因为容器没有在Privileged模式下运行,所以它没有显示附加到它的磁盘。让我们以Privileged模式运行一个新容器。 

2. Privileged容器

步骤 1 –运行以下命令以Privileged模式启动容器,只需要使用一个额外的标志,即“–privilege”选项,如下所示: –

docker run -it --rm --privileged <Docker_Image> sh
docker run -it --rm --privileged ubuntu sh

docker privileged作用是什么 | docker privileged原理 24

 步骤 2 –让我们运行“fdisk”命令来列出可用磁盘,如下所示: –

fdisk –l

docker privileged作用是什么 | docker privileged原理 24

 

docker privileged作用是什么 | docker privileged原理 24

在上面的快照中,我们可以看到它列出了现在所有可用的磁盘信息及其分区。在这里,我们将专注于’/dev/sdb’,该磁盘已经分区,分区名称为’/dev/sdb1’。如果未创建分区,则选择该磁盘并首先使用“fdisk”实用程序创建分区,您可以在容器内执行此操作,因为容器以Privileged模式运行。

第 3 步:现在,创建一个文件夹来挂载这个分区:

mkdir /mnt/my-data

docker privileged作用是什么 | docker privileged原理 24

第 4 步: 让我们继续将此分区挂载到容器并写入一些数据,如下所示:

mount /dev/sdb1 /mnt/my-data

docker privileged作用是什么 | docker privileged原理 24

 

第 5 步:将目录更改为“/mnt/my-data”并创建一个名为“test.txt”的测试文件,并在其中填充一些数据,如下所示: –

cd /mnt/my-data
cat >> test.txt

它是一个测试文件。

^Z(press ctrl + Z)
cat test.txt

docker privileged作用是什么 | docker privileged原理 24

在上面的快照中,我们创建了一个测试文件并向其中添加了一些文本,现在我们要退出该容器并将相同的磁盘分区挂载到主机并尝试访问该文件。

步骤6:退出容器并运行以下命令将磁盘分区’/dev/sdb1’挂载到主机:

sudo mount /dev/sdb1 /mnt/disk2
cd /mnt/disk2
ls
cat test.txt

docker privileged作用是什么 | docker privileged原理 24

在上面的快照中,我们已将磁盘分区挂载到现有文件夹“/mnt/disk2”,您可以将其挂载到您想要的任何文件夹位置,果然,我们能够访问在容器内创建的文件。

场景2:

使用 ‘–cap-add’ 和 ‘–cap-drop’ 选项分别添加和限制容器的功能。

第 1 步:我们可以使用值为 ‘ALL’ 的 ‘–cap-add’ 来提供所有功能,因为默认情况下有一个默认允许的功能列表,但我们有一种情况,我们想删除一个功能,因此我们还必须使用“–cap-drop”选项来删除该功能,如下所示: –

docker run -it --rm --privileged --cap-add=ALL --cap-drop=MKNOD ubuntu sh

docker privileged作用是什么 | docker privileged原理 24

 

在上面的快照中,我们添加了除“MKNOD”之外的所有功能,这将阻止使用 mknode 创建特殊文件。我们已经运行了“fdisk –l”命令来检查容器是否在Privileged模式下运行。

注意:

  • 任何需要权限标志才能成功的命令都可以用来测试容器内部的Privileged模式。
  • 我们可以使用以下命令检查容器以了解该容器是否以Privileged模式运行:
docker inspect --format='{{.HostConfig.Privileged}}' <container id>

好处

  • 它为以Privileged模式运行的容器提供对主机的类似访问。
  • 它还允许使用这种模式在 Docker 中运行 Docker。
  • 如果有人想要他们自己的私有 Docker 实例,我们可以提供 Docker-as-a-Service。

结论

Docker Privileged模式在一些场景下很棒,但是我们应该意识到它的风险,因为我们可以在容器内部做任何事情,甚至可以破坏主机运行的分区。建议使用其他可用标志来限制访问。

推荐文章

这是 Docker Privileged 的​​指南。这里我们讨论介绍、优点、示例以及Privileged函数如何在 Docker 中工作?

本文是docker快速入门教程系列的一部分您也可以查看以了解更多信息 –

 


慕源网 » docker privileged作用是什么 | docker privileged原理 24

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录