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

一个泊坞窗用户可以向另一个隐藏数据吗?

甘兴学
2023-03-14
问题内容

Alice和Bob都是同一主机上docker组的成员。爱丽丝想在Docker容器中运行一些长时间运行的计算,然后将结果复制到她的主文件夹中。鲍勃非常爱管闲事,爱丽丝不希望他能够读取她的计算所使用的数据。

系统管理员可以采取什么措施使Bob离开Alice的docker容器?

我认为这就是Alice应该根据命名的卷和dockercp命令从容器中进出数据的方式。

$ pwd
/home/alice
$ date > input1.txt
$ docker volume create sandbox1
sandbox1
$ docker run --name run1 -v sandbox1:/data alpine echo OK
OK
$ docker cp input1.txt run1:/data/input1.txt
$ docker run --rm -v sandbox1:/data alpine sh -c "cp /data/input1.txt /data/output1.txt && date >> /data/output1.txt"
$ docker cp run1:/data/output1.txt output1.txt
$ cat output1.txt
Thu Oct  5 16:35:30 PDT 2017
Thu Oct  5 23:36:32 UTC 2017
$ docker container rm run1
run1
$ docker volume rm sandbox1
sandbox1
$

我创建一个输入文件input1.txt和一个命名卷sandbox1。然后,我启动一个名称为的容器run1,以便可以将文件复制到命名的卷中。该容器仅显示“确定”消息并退出。我复制输入文件,然后运行主要计算。在此示例中,它将输入复制到输出,并向其添加第二个时间戳。

计算完成后,我复制输出文件,然后删除容器和命名的卷。

有什么方法可以阻止Bob装载自己的容器,该容器装载了命名的卷并向其显示Alice的数据?我已经将Docker设置为使用用户名称空间,因此Alice和Bob没有对主机的根访问权限,但是我看不到如何使Alice和Bob使用不同的用户名称空间。


问题答案:

通过在docker组中,Alice和Bob已被授予对主机的虚拟根访问权限。

docker组授予他们通过套接字文件访问Docker API的权限。Docker中目前没有工具可以区分Docker
API的用户。Docker守护程序以root身份运行,并且借助Docker API的允许,Alice和Bob将能够解决您尝试设置的所有障碍。

用户命名空间

使用用户名称空间隔离可以阻止容器
的用户以特权用户或其他用户身份脱离容器,因此实际上,容器进程现在以非特权用户身份运行。

一个例子是

  • Alice被授予ssh访问在namespace_a中运行的容器A的权限。
  • 鲍勃被ssh授予对namespace_b中的容器B的访问权限。

由于用户现在仅位于容器内,因此他们将无法修改主机上的其他文件。假设两个容器都映射了相同的主机卷,那么没有世界范围的读/写/执行的文件对于彼此来说是安全的。由于他们无法控制守护程序,因此他们无能为力。

Docker守护程序

命名空间无法保护Docker守护进程和API本身,而Docker守护进程和API本身仍然是一个特权进程。解决用户名空间的第一种方法是在命令行上设置主机名称空间:

docker run --privileged --userns=host busybox fdisk -l

docker execdocker cpdocker export命令会给别人能够访问泊坞API创建的任何容器的内容。

限制Docker访问

可以限制对API的访问,但是您不能在docker组中拥有具有shell访问权限的用户。

docker通过sudo或提供sudo访问对docker参数进行硬编码的脚本的有限命令集:

#!/bin/sh
docker run --userns=whom image command

对于自动化系统,可以通过附加的shim API提供访问权限,并在Docker
API之前添加适当的访问控制,然后将“受控”请求传递给Docker。dockerodedocker- py可以轻松插入REST服务并与Docker交互。



 类似资料:
  • 问题内容: 我想在使用Selenium WebDriver和Docker而不是虚拟机的同一台计算机上运行多个Internet Explorer版本。据我所知,Docker完全在Linux上运行,这将使Docker中的IE无法实现。我之所以问是因为我看到Docker在Microsoft Azure上运行。 问题答案: Docker当前不适用于基于Windows的应用程序。Azure上的Docker是

  • 问题内容: 我正在docker容器内的GCE上运行jenkins实例,并希望从此Jenkinsfile和Github执行多分支管道。我正在为此使用GCE詹金斯教程。这是我的 我总是得到一个错误: 为了使docker在jenkins中工作,我需要更改什么? 问题答案: 看起来像DiD(Docker中的Docker),最近的一期杂志指出这是有问题的。 请参阅“ 在您的CI或测试环境中使用Docker-

  • 如何将多个标签附加到一个 Docker 映像?是否可以使用一个 Docker 文件创建多个标记? 不知何故,这是可能的;例如会得到几个图像,其中一些有多个标签:

  • 问题内容: 我有两个要素。第一个包含国家(例如美国,加拿大,英国,俄罗斯,波兰…),第二个国家被隐藏, 仅 包含美国和加拿大(例如纽约,洛杉矶,芝加哥…或渥太华,温哥华)的城市,萨里…) 如果用户从第一个中选择“加拿大”或“美国” ,则第二个应显示并允许他选择城市。 有可能吗?我使用Ajax和JQuery Validation表单访问了许多网站,但没有找到类似的来源。 谢谢。 问题答案: 侦听选择

  • 我在windows 10 home上工作。 当我运行docker快速启动终端快捷方式或直接运行 start.sh 时,我收到消息: Docker Machine未安装。请重新运行工具箱安装程序,然后重试。看起来“查找vboxmanage.exe”步骤出错…按任意键继续。。。 我尝试重新安装,选择了所有选项,包括NDIS5驱动程序,但我没有帮助。运动学工作正常,但我无法在终端中运行docker。 我

  • 问题内容: 尝试遵循从Docker网站构建Docker映像的说明。 https://docs.docker.com/examples/running_redis_service/ 这是我将遵循文档上的说明并使用此Dockerfile的错误 怎么解决? 问题答案: 您需要添加一个点,例如,这意味着您在本地目录中使用Dockerfile,如果您使用docker 1.5,则可以在其他位置指定Docker