以 root 身份运行进程与使用所有 Linux 功能运行进程之间的区别

以 root 身份运行进程与使用所有 Linux 功能运行进程之间的区别

privileged:true我有一个 docker 容器,当在规范中设置时,它在 kubernetes pod 中运行得非常好。但是当我运行同一个 docker 容器时,通过提供所有 Linux 功能,它失败了。在这两种情况下,进程的功能位掩码相同,如下所示:

SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000000004
SigCgt: 0000000000014002
CapInh: 0000003fffffffff
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000

那么,两者之间有什么区别吗?以 root 身份运行进程 运行具有所有功能的进程

更新:正如 @ctrl-alt-delor 所指出的,设置privilege:true意味着容器将有权访问主机上的所有设备,以及与主机上容器外部运行的进程相同的主机访问权限

答案1

我认为你错过了正在发生的事情。

特权不是root。默认情况下,容器以 root 身份运行,但功能很少,并且没有特权。

回答你的问题(在标题中):很少,只是用户名,因此文件将以用户身份创建。但是,用户将有权更改用户名。 (除了一些有缺陷的软件,它们不必要地检查 root 权限)。

您必须检查手册以了解特权的作用(我不知道,我确实知道它与特权不同root,它与功能不同)。

默认情况下,Docker 容器是“无特权的”,例如不能在 Docker 容器内运行 Docker 守护进程。这是因为默认情况下不允许容器访问任何设备,但“特权”容器可以访问所有设备(请参阅有关 cgroups 设备的文档)。

当操作员执行 docker run --privileged 时,Docker 将启用对主机上所有设备的访问,并在 AppArmor 或 SELinux 中设置一些配置,以允许容器与主机上容器外部运行的进程几乎相同地访问主机。有关使用 --privileged 运行的更多信息,请参阅 Docker 博客。

如果您想限制对特定设备的访问,可以使用 --device 标志。它允许您指定可在容器内访问的一个或多个设备。

您还可以从主机映射单个文件/目录-v

相关内容