从头开始的非特权执行

时间:2017-02-14 21:56:47

标签: security go docker

我正在从头开始构建/部署go / golang微服务。

是否可以在以这种方式构建的映像上指定非特权执行 - 映像上只有两个文件 - go可执行文件和根证书文件 - 因此似乎没有任何特权概念在容器内。

我也使用只读容器和--selinux-enabled = true --icc = false --iptables = true,但如果我知道可执行文件是作为“常见”非运行的,那么会感觉更温暖和模糊 - 特权用户。

1 个答案:

答案 0 :(得分:0)

在从构建的图像" FROM scratch"

中启动的容器内运行CMD的用户(root)似乎没有任何选择。

但是根据容器的定义,该用户只能影响自己的(磁盘,内存,资源)空间,而不能影响主机。所以没关系。

唯一的另一种选择是仅从头开始定义一个容器来声明一个容器容器,您可以在一个能够与非root用户一起运行的完整映像中使用它。 请参阅" Running as a non-root inside a container"

$ echo 'FROM scratch
ADD data.tar /
VOLUME ["/data"]' > Dockerfile

$ docker build -t minimal .
$ docker create --name minimal minimal :
  

安装此最小卷容器的容器需要创建id为1000的用户:

$ docker run --rm --volumes-from minimal  -it debian:jessie /bin/bash -c 'useradd postgres && ls -l /data'

这不是你需要的(因为Go程序不需要任何动态库,并且只能在系统调用上运行)。但这说明了非root用户如何使用" FROM scratch"容器(此处为卷)