如何禁用Docker容器的root访问权限?

4
我们有一些离岸开发人员希望在本地运行我们的服务器,但出于安全考虑,我们不想将服务器代码提供给他们。因此,一个解决方案是让他们运行一个Docker容器,这是我们服务器的自包含版本!所以他们不需要在自己的机器上进行复杂的设置!
问题在于,总是可以作为root访问Docker实例的Linux shell,从而获取源代码的访问权限。
如何禁用Docker容器的root访问?或者我们如何隔离我们的源代码,使其免受root访问的影响?

2
他们如何在不看到源代码的情况下执行或使用它? - Robert
2
你无法阻止人们访问图像中的内容。 - Matt
如果他们得到了代码,他们就得到了代码。就这么简单。抱歉。Docker 不会 隔离。 - johnharris85
我认为这是一个好问题和常见的用例。有人能否建议符合要求的替代工作流程? - roman
1个回答

3
你可以通过创建一个用户(例如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 命令。

希望这能有所帮助。


3
然而,这并没有为源代码提供实际保护,因为一旦用户获得了图像,他们就知道图像里面的内容。 - Matt
2
开发人员可以选择不使用seccomp。只有在您控制运行时环境和镜像时才有用,而OP仅控制镜像。 - Dan Lowe
在这种情况下,这是没有意义的。如何防止访问他们正在控制的内容?您至少需要控制如何运行容器,然后通过ssh或其他方式为开发人员提供访问权限。 - OscarAkaElvis
确切地说,@OscarAkaElvis,这就是为什么这个问题很愚蠢的原因 :p - johnharris85

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接