假设我有一台 Ubuntu 机器并且做了sudo apt install docker.io
.我是否刚刚在我的机器上设置了一个巨大的安全漏洞,允许任何拥有终端访问权限的人升级为root?
我这么问是因为我可以将任何目录作为容器内的卷安装,升级到容器内的根目录,而且似乎我可以在安装的卷中做任何我想做的事情。这一切似乎都是错误的,我觉得我肯定错过了一些东西。或者就这么简单,Ubuntu 的存储库中确实有一个不需要密码的“sudo”替代品?
答案1
不完全是,您允许docker
组中的任何人升级为root。这在/usr/share/doc/docker.io/README.Debian
:
正如上游文档中所述(https://docs.docker.io),Docker将允许“docker”组中的非root用户访问“docker.sock”,从而与守护进程进行通信。要将自己添加到“docker”组,请使用以下命令:
adduser YOURUSER docker
正如上游文档中所述,“docker”组(以及访问 Docker API 的任何其他方式)与 root 等效。如果您不信任在您的机器上拥有 root 权限的用户,那么您也不应该信任他们的 Docker。如果您对 Docker 安全方面的更多信息感兴趣,请务必阅读上游文档中的“Docker 安全”文章:
如果您有兴趣能够运行(大多数)OCI 容器而不需要 root 等效权限,请查看波德曼。
答案2
不可以。安装 Docker 默认情况下不允许任何人使用它。
$ docker info
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/info: dial unix /var/run/docker.sock: connect: permission denied
作为普通用户,您甚至没有连接到 Docker 守护进程的权限,更不用说指示它在容器中运行某些内容了。
另一方面,该docker
组中的任何用户实际上都拥有主机的 root 权限。在不授予用户主机 root 权限的情况下,允许用户创建 Docker 容器是非常困难的。如果容器配置安全,您可以允许用户在 Docker 容器中运行应用程序。安全配置不得授予对主机上任何敏感文件的访问权限,并且应包含USER
不授予容器内 root 访问权限的指令。 (防止 root 逃逸容器是可能的,但很棘手。)
“sudo 替换”是adduser alice docker
或具有alice ALL = ( : docker) docker
,/etc/sudoers
而不仅仅是安装docker.io
。