当前位置: 首页 > 面试题库 >

Docker对主机系统的根访问

逄念
2023-03-14
问题内容

当我以普通用户身份运行容器时,我可以映射 和修改 主机文件系统上root拥有的目录。这似乎是一个很大的安全漏洞。例如,我可以执行以下操作:

$ docker run -it --rm -v /bin:/tmp/a debian
root@14da9657acc7:/# cd /tmp/a
root@f2547c755c14:/tmp/a# mv df df.orig
root@f2547c755c14:/tmp/a# cp ls df
root@f2547c755c14:/tmp/a# exit

现在,我的 主机
文件系统将lsdf键入时执行命令(大多数情况下无害)。我不敢相信这是理想的行为,但是它正在我的系统中发生(debian延伸)。该docker命令具有普通权限(755,不是setuid)。

我想念什么?

可能需要澄清更多。目前,我对容器本身的作用或可以做的事情不感兴趣,也不关心容器内部的根访问权限。

而是我注意到,系统上可以运行docker容器的任何人都可以使用它来获得对我的 主机
系统的根访问权限,并以root用户身份对其进行读写操作:有效地为所有用户提供根访问权限。那显然不是我想要的。如何预防呢?


问题答案:

有许多Docker安全功能可用于解决Docker安全问题。可以帮助您的特定名称是User Namespaces。

基本上,您需要在预先停止Docker守护程序的情况下在主机上启用用户命名空间:

dockerd --userns-remap=default &

请注意,这将禁止容器在特权模式下运行(从安全角度考虑,这是一件好事),并重新启动Docker守护进程(应在执行此命令之前将其停止)。当您输入Docker容器时,可以将其限制为当前非特权用户:

docker run -it --rm -v /bin:/tmp/a --user UID:GID debian

无论如何,请稍后尝试使用默认命令输入Docker容器

docker run -it --rm -v /bin:/tmp/a debian

如果您尝试操纵映射到Docker卷的主机文件系统(在本例中为/bin),其中文件和目录由root拥有,那么您将收到一个Permission denied错误。这证明用户命名空间提供了您要寻找的安全功能。

我建议通过https://github.com/docker/labs/tree/master/security/userns上的此安全功能进行Docker实验。我已经完成了所有实验室的工作,并在那里开设了Issues和PR,以确保那里实验室的完整性并可以为其提供担保。



 类似资料:
  • 我想使用图形工具来管理一些数据,但是,我无法在我的Ubuntu18.04上安装该包。 所以我从官方站点下载了docker文件,我想知道如何从docker访问主机系统上的.csv文件。

  • 我已经在一台远程Ubuntu机器上安装了MySQL服务器。用户在表中定义如下: 我可以使用标准的客户端,通过用户从同一远程计算机命令行界面进行访问。现在我想允许internet上每台主机的根用户访问,所以我尝试添加以下行(它与上一个转储中的第一行完全重复,除了列): 但我个人电脑上的客户继续告诉我(我遮住了服务器IP): SQL错误(2003):无法连接到'46.x.x.x'上的MySQL服务器(

  • 我正在使用 docker-compose 来构建环境,并且我想从正在运行的 docker 容器连接到运行 docker 的主机系统上的本地主机。IE,我在Windows 10上,正在127.0.0.1:8080上运行Spring启动应用程序,并且有docker工具箱,其运行容器应该在Spring启动应用程序上发送POST到RestAPI。当我向我的网络接口的IP发送POST请求时,我已经找到了解决

  • 本文向大家介绍Linux系统使用用户密钥ssh主机访问,包括了Linux系统使用用户密钥ssh主机访问的使用技巧和注意事项,需要的朋友参考一下 使用用户密钥ssh主机,在安全性上要大大高于直接输入root 的密码,具体实现,请看下面的教程。 ps:使用root权限进行操作 1)先创建一个账户 执行后,/home 下生成一个名为lee的目录。目录的权限为700,所属组为wheel,所属用户为lee

  • 我在本地机器(Mac)上工作,其中有一个名为sqlvm的遗留虚拟机(这意味着我可以通过http://sqlvm:从本地主机访问这个虚拟机)。现在,我在应该连接到vm的同一个本地主机(我的Mac)中设置了几个docker容器(使用docker-compose)。< code>pymysql会引发一个异常: 如何将外部的“sqlvm”公开给内部 Docker 网络? 编辑:我尝试在yml文件中为相关容

  • 我有一个 docker 容器,我想给它 --network=host AND -。我需要连接到主机网络才能将主机数据狗服务器 (UDP) 和 网络用于其数据库。 尝试添加这两个网络会导致。 知道正确的处理方法吗?