一个 docker 用户可以向另一个用户隐藏数据吗?

2023-12-02

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

系统管理员可以采取什么措施来阻止 Bob 进入 Alice 的 docker 容器吗?

以下是我认为 Alice 应该如何从她的容器中获取数据的方式,基于命名卷docker cp command,如中所述这个问题 and this one.

$ 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这样我就可以将文件复制到指定的卷中。该容器仅打印一条“OK”消息并退出。我复制输入文件,然后运行主要计算。在此示例中,它将输入复制到输出并为其添加第二个时间戳。

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

有没有什么方法可以阻止 Bob 加载他自己的容器,该容器安装指定的卷并向他显示 Alice 的数据?我已经设置了 Docker 来使用用户命名空间,因此 Alice 和 Bob 没有主机的 root 访问权限,但我不知道如何使 Alice 和 Bob 使用不同的用户命名空间。


Alice 和 Bob 已被授予对主机的虚拟根访问权限docker group.

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

用户命名空间

使用用户命名空间隔离停止用户inside容器以特权或不同用户身份脱离容器,因此实际上容器进程现在以非特权用户身份运行。

一个例子是

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

由于用户现在仅位于容器内,因此他们将无法修改主机上彼此的文件。假设如果两个容器映射相同的主机卷,则没有全局读/写/执行的文件将不会受到其他容器的影响。由于他们无法控制守护进程,所以他们无法采取任何行动来突破。

Docker 守护进程

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

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

The docker exec, docker cp and docker export命令将向有权访问 Docker API 的人员提供任何已创建容器的内容。

限制 Docker 访问

可以限制对 API 的访问,但不能让用户在docker group.

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个 docker 用户可以向另一个用户隐藏数据吗? 的相关文章

随机推荐

  • 检查套件完成后如何触发 Github 工作流程?

    我只想在特定工作流程完成时触发工作流程 有人知道该怎么做吗 一些背景 我有一个工作流程Tests另一个叫Build feature 我运行我的Tests每个 PR 到分支的工作流程feature 如果某些内容被推送 合并到分支feature
  • 几个 catch 块还是一个带有dynamic_cast 的catch 块?

    我们有一个异常类的层次结构 有一个GenericException类以及从它派生的许多类 GenericException是多态的 它有一个虚拟析构函数 派生类之一是FileException抛出以指示操作文件系统对象时出现错误 FileE
  • PHP 中“&$var”中的“&”是什么意思? [复制]

    这个问题在这里已经有答案了 什么是 意思是在 var in PHP 有人可以帮我进一步解释一下吗 先感谢您 这意味着传递变量参考 而不是传递变量的值 这意味着当程序流返回到调用代码时 对 preparse tags 函数中该参数的任何更改都
  • 使用react-router的history.push()和自定义URL参数

    我正在尝试创建一个用户可以加入群组的应用程序 我拥有的页面之一是群组仪表板 为此 我创建了一个 URL 参数为 id 的路由
  • 禁止带有 `static_assert` 的函数

    我想阻止某些函数被调用 让我们忽略通过函数指针或其他东西调用函数的情况 只关注直接函数调用的情况 我可以这样做 delete 然而 发布的诊断信息并不丰富 我考虑过使用static assert 您可以使用它提供自定义诊断消息 我放置了一个
  • 将二维数组(字符串)存储到文件并检索它

    我制作了一个简单的程序 其中有一个存储大量数据的 2D 字符串数组 我搜索了很多地方来了解如何存储和检索二维数组 我想在程序结束时将数据保存在数组中 并在程序启动时检索该数据 我努力了 ObjectOutputStream toFile n
  • 如何将 java.lang.String 的空白 JSON 字符串值反序列化为 null?

    我正在尝试将一个简单的 JSON 反序列化为 java 对象 然而我却变得空虚String值java lang String属性值 在其余属性中 空白值将转换为null值 这就是我想要的 下面列出了我的 JSON 和相关的 Java 类 J
  • 从 python 中的标签名称中抓取数据

    您好 我正在尝试从网站上抓取用户数据 我需要用户 ID 该 ID 可在标签名称本身中找到 我正在尝试使用 python selenium 和 beautiful soup 中的 UID 来抓取div tag Example lt div i
  • 使用 Android 本机应用程序中的 ADAL 库对 Azure AD 上的用户进行身份验证

    我们有一个要求 用户应该从本机应用程序 Android iOS 登录 而不从应用程序调用 Microsoft 登录 Web 视图窗口 我们有示例代码 演示使用 net 控制台应用程序中的用户名和密码对 Azure AD 进行非交互式身份验证
  • FreeSwitch + Mode Verto + Webrtc + Android + 无法从 android 拨打电话

    我做了一个mode verto安卓客户端 使用WebRtc 预建库 org webrtc google webrtc 1 0 libjingle io pristine libjingle 11139 aar and 自由切换但只成功进行单
  • 启动 JavaFX 应用程序时的内部 NPE

    所以基本上我开始了一个虚拟的 JavaFX 项目 只是为了为我的实际问题实现一个简约的示例 但现在我什至无法再运行那个简约的项目 也没有收到足够的错误信息来自己用谷歌搜索出来 所以现在 当我运行代码时 我收到给定的错误堆栈 这不会引导我到任
  • Biztalk 和调用 Web 服务的最佳方式

    我正在编写一个 biztalk 编排 需要调用一个 Web 服务 可能是多个 Web 服务 而且可能不止一次 我面前有两个选择 一 在单独的代码项目中使用 wsdl 并从表达式形状的代码中调用 Web 服务 二 从 Biz 使用它 获取架构
  • 无法在 MySQL 中获得正确的编码

    一段时间以来 我一直在努力解决 MySQL 中的编码问题 我正在建立一个数据库 其中不仅包含拉丁文 还包含西里尔文和阿拉伯文文本 这是我如何创建数据库的示例 CREATE DATABASE db1 DEFAULT CHARACTER SET
  • 错误:该位置没有任何可重复的内容

    我有一个文本文件 其中包含俚语及其用真正的英语替代的列表 我使用 作为分割点将此文本文件转换为字典 并且在转换后打印字典时一切似乎都正常 但是 源自此行的错误 slangs re re compile join slang dict key
  • 对两个给定日期之间的集合日期字段进行排序

    我想根据两天之间的日期字段对列表进行排序 比如从现在到接下来的三天 排序列表应从现在开始和接下来的 3 天按升序排列 之后的所有先前和未来日期按升序排列 e g List
  • 如何在多个 EJB 之间共享 Java 缓存系统 (JCS) 资源

    我使用 JCS 来存储 ldap 搜索结果 该结果应由多个 EJB 共享 我创建了一个单例类来仅初始化 JCS 一次 但由于 EJB 的类加载器 它已使用自己的副本初始化了多次 所以搜索资源不共享 你们如何解决需要在多个 bean 之间共享
  • 如何让应用程序在后台保持唤醒状态

    我编写了一个应用程序 该应用程序连接到蓝牙设备并在汽车 在后台 和导航 或其他东西 在前台使用 但在 Android 7 也可能是 6 上 应用程序会在一段时间后进入睡眠状态 当我尝试从相机拍照时 睡眠模式 立即生效 我的应用程序现在正在睡
  • 从基类方法调用基类重写函数

    public class A public void f1 String str System out println A f1 String this f1 1 str public void f1 int i String str Sy
  • 检测精灵套件中的碰撞

    我正在尝试使用精灵套件制作一个简单的游戏 基本思想是 有一名玩家可以跳跃以避免阻挡 但我有一个问题 我不知道如何做到当玩家击中方块时玩家消失并且血液动画开始 首先 我不明白我在苹果网站上找到的这段代码的作用 static const uin
  • 一个 docker 用户可以向另一个用户隐藏数据吗?

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