【问题标题】:How to disable the root access of a docker container?如何禁用 docker 容器的 root 访问权限?
【发布时间】:2017-10-04 11:52:09
【问题描述】:

我们有海外开发人员希望在本地运行我们的服务器,但出于安全原因,我们不想给他们服务器代码。所以一个解决方案是他们运行一个 Docker 容器,这是我们服务器的一个独立版本!所以他们这边没有复杂的设置! :)

问题在于始终可以以 root 身份访问 Docker 实例的 Linux shell,从而可以访问源代码。

如何禁用 Docker 容器的 root 访问权限?或者我们如何才能将我们的源代码与 root 访问隔离?

【问题讨论】:

  • 他们如何在没有看到源代码的情况下执行或使用它?
  • 你无法阻止人们访问图片中的内容。
  • 如果他们得到了代码,他们就得到了代码。就那么简单。对不起。 Docker 确实隔离。
  • 我认为这是一个很好的问题和一个常见的用例。谁能建议可以满足要求的替代工作流程?

标签: docker dockerfile


【解决方案1】:

您可以修改您的容器,创建一个用户(例如 foo)并为他分配正确的权限。然后您可以使用参数-u foodocker run 命令上运行docker 容器。例如,如果您运行:docker run --rm -ti -u foo myCustomImage sh。这将使用 $ 而不是 # 打开 sh shell。当然,在您的 Dockerfile 上,您必须先创建 foo 用户。

如果您想要更多限制,例如禁用某些内核功能,您可以从 docker 1.10 开始使用 seccomp 安全功能。看看吧:

https://docs.docker.com/engine/security/seccomp/

使用它您可以禁用和限制许多系统功能...以及拒绝mkdir 命令的简单示例。像这样创建一个 json 文件(例如将其命名为 sec.json):

{
    "defaultAction": "SCMP_ACT_ALLOW",
        "syscalls": [
                {
                    "name": "mkdir",
                    "action": "SCMP_ACT_ERRNO"
                }
            ]
}

然后运行你的容器:docker run --rm -ti --security-opt seccomp=/path/on/host/to/sec.json ubuntu:xenial sh。您可以检查容器内部您无法运行mkdir 命令。

希望这会有所帮助。

【讨论】:

  • 这并没有为源代码提供实际的保护,但是一旦用户有了图像,他们就知道图像里面的内容了。
  • 开发者可以选择不使用 seccomp 运行。这仅在您控制运行时环境图像时使用,OP 仅控制图像。
  • 在这种情况下没有任何意义。如何防止访问他们正在控制的东西?您至少需要控制如何运行容器,然后通过 ssh 或其他方式为开发人员提供对它的访问权限。
  • 正是@OscarAkaElvis,这就是为什么这个问题很愚蠢:p
猜你喜欢
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2018-04-28
  • 2019-06-18
  • 2023-03-18
  • 2022-01-22
相关资源
最近更新 更多