Docker根权限级别查询

我所有的问题都是关于最新版本的DOCKER

  1. 守护进程仍然需要以root权限运行?

  2. 每个有权访问Docker组的用户都拥有root权限? 所以原来的root用户和拥有Docker组权限的用户之间没有任何区别。 如果有分歧,他们是什么?

  3. 因此,使用授权插件,您只能限制用户访问Docker守护进程,而不能限制用户在主机上的其他权限? (假设在这个Docker组/用户有权访问Docker守护进程的用户拥有主机权限 – 我的上一个问题)

  4. “runc,containerd”和“docker daemon作为root运行”之间是否有任何联系? 或者这些(runc,containerd)只为支持OCI格式而引入? 我有一个愚蠢的想法,这些是为了消除docker运行作为根引入 – 我相信这是错误的,但需要确认。

Daemon still need to run as a root right? 

是的,你可以在“ 在各种发行版上configuration和运行Docker ”中看到它,尽pipe它增加了 :

从Docker 1.12容器开始,可以在没有Docker或containerd运行的情况下运行。
这允许Docker守护进程退出,升级或从崩溃中恢复,而不会影响系统上运行的容器。
要启用此function,需要在启动dockerd时添加--live-restore标志。 这将确保Docker不会在正常closures或重启时停止容器运行。

 Every user having access to Docker group, has root permissions? So, there is no difference at all between original root user and user having permissions to Docker group? 

不完全是。 当守护进程启动时,docker守护进程将使docker组读/写Unix套接字的所有权

如“ Docker守护进程攻击面 ”(仍为1.12)所述,

只有受信任的用户才能被允许控制你的Docker守护进程。

您可以启动一个容器,其中/host目录将成为/host上的/目录; 容器将能够不受任何限制地改变你的主机文件系统。

所以docker组的用户部分不是 root。 但是它可以访问所有可以从主机上挂载任何东西的容器。 这是…非常接近根。

 So, with authorization plugins you just restrict access of a user to Docker daemon but not to the other permissions that the user has on host? 

自“docker 1.11”以来,“ 授权插件 ”页面并没有明显改变 。
主要变化是:

如果在Docker守护进程中启用了TLS,则默认的用户授权stream将从证书使用者名称中提取用户详细信息。 +即, User字段被设置为客户端证书主题公用名称,并且AuthenticationMethod字段被设置为TLS

 Is there any link between "runc, containerd" and "docker daemon running as a root"? or else are these (`runc`,`containerd`) introduced only for supporting OCI format? 

有问题15187“用户命名空间 – 阶段1”和runc PR 160

prestart钩子在容器进程启动之后(克隆到新的命名空间)之后运行,但在用户命令(例如bash)之前执行。 这允许某人在容器的命名空间中做一些有用的事情。

 I had a stupid thought that these are introduced for eliminating docker running as a root 

这将更有可能通过用户名空间来实现。
用户名(usernamespace) 似乎仍然是实验性的 (来自PR 12648 )