特权容器和功能


Answers:


75

实际上,以特权模式运行确实为容器提供了所有功能。但是,最好始终为容器提供所需的最低要求。

如果您查看Docker文档,它们也会引用此标志:

完整的容器功能(特权)

--privileged标志为容器提供了所有功能,并且还解除了设备cgroup控制器强制执行的所有限制。换句话说,容器可以完成主机可以做的几乎所有事情。存在此标志是为了允许特殊用例,例如在Docker中运行Docker。

您可以使用--cap-addflag赋予特定功能。请参阅man 7 capabilities有关这些功能的更多信息。可以使用文字名称,例如--cap-add CAP_FOWNER


有什么方法可以找出特定应用程序需要哪些功能?对于大多数应用程序,这似乎没有记录。
codefx

@codefx这里没有经验法则,它取决于应用程序以及在运行时可能调用的系统。如果您使用的是来自中心的现成的Docker映像,则很可能会在此处提及。如果您使用自己编写的内容,则应该知道所使用的内核API可能需要特殊功能
buddy123 '16

51

您永远不想使用来运行容器--privileged

我正在具有NVMe驱动器的笔记本电脑上执行此操作,但是它适用于任何主机:

docker run --privileged -t -i --rm ubuntu:latest bash

首先让我们做一些小事情,以测试/ proc文件系统

从容器中:

root@507aeb767c7e:/# cat /proc/sys/vm/swappiness
60
root@507aeb767c7e:/# echo "61" > /proc/sys/vm/swappiness    
root@507aeb767c7e:/# cat /proc/sys/vm/swappiness
60

好的,它是为容器还是为主机更改了它?

$ cat /proc/sys/vm/swappiness
61

哎呀!我们可以任意更改主机的内核参数。但这只是DOS的情况,让我们看看是否可以从父主机收集特权信息。

让我们走一/sys棵树,找到引导盘的主要次要号。

注意:我有两个NVMe驱动器,并且容器在另一个驱动器的LVM下运行

root@507aeb767c7e:/proc# cat /sys/block/nvme1n1/dev
259:2

好的,让我们在dbus规则不会自动扫描的位置制作设备文件:

root@507aeb767c7e:/proc# mknod /devnvme1n1 b 259 2
root@507aeb767c7e:/proc# sfdisk -d /devnvme1n1 
label: gpt
label-id: 1BE1DF1D-3523-4F22-B22A-29FEF19F019E
device: /devnvme1n1
unit: sectors
first-lba: 34
last-lba: 2000409230
<SNIP>

好的,我们可以读取启动盘,让我们为其中一个分区创建一个设备文件。虽然我们无法挂载它,因为它已经打开了,我们仍然可以使用dd它来复制它。

root@507aeb767c7e:/proc# mknod /devnvme1n1p1 b 259 3
root@507aeb767c7e:/# dd if=devnvme1n1p1 of=foo.img
532480+0 records in
532480+0 records out
272629760 bytes (273 MB, 260 MiB) copied, 0.74277 s, 367 MB/s

好吧,让我们挂载它,看看我们的努力是否奏效!!!

root@507aeb767c7e:/# mount -o loop foo.img /foo
root@507aeb767c7e:/# ls foo
EFI
root@507aeb767c7e:/# ls foo/EFI/
Boot  Microsoft  ubuntu

因此,基本上,您允许任何人在其上启动--privileged容器的任何容器主机都与授予他们对该主机上每个容器的根访问权限相同。

不幸的是,Docker项目选择了受信任的计算模型,并且在auth插件之外,没有任何方法可以防止这种情况的发生,因此总是在添加所需功能与使用方面犯错--privileged


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.