如何禁用docker容器的根访问?

我们有离岸开发人员想在本地运行我们的服务器,但出于安全原因,我们不想给他们的服务器代码。 所以一个解决scheme是他们运行一个Docker容器,它是我们的服务器的一个独立版本! 所以没有复杂的设置在他们身边! 🙂

问题是始终可以以root身份访问Docker实例的Linux shell,因此可以访问源代码。

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

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

如果您需要更多的限制,例如禁用某些内核function,您可以使用docker 1.10 seccomp安全function。 一探究竟:

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

使用这个,你可以禁用和限制很多系统function…和简单的例子,否认mkdir命令。 像这样创build一个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命令。

希望这可以帮助。