关于OpenShift镜像使用的uid问题

在客户那里很多时候遇到过外部的image作为pod运行后出现的各种因为权限访问导致的失败。找到官方文档对这个问题有一些说明。

https://docs.openshift.com/container-platform/3.11/creating_images/guidelines.html

默认情况下,OpenShift容器平台使用任意分配的用户ID(Arbitrary User ID)运行容器。

这提供了额外安全性,避免了由于容器引擎漏洞而导致逃逸容器的进程,从而实现了对主机节点的升级权限。

为了支持image以任意用户身份运行,映像中的进程可能写入的目录和文件应归根组所有,并且可由该组读取/写入。 要执行的文件还应该具有组执行权限。

在Dockerfile中添加以下内容可设置目录和文件许可权,以允许根组中的用户在构建的映像中访问它们:

RUN chgrp -R 0 /some/directory && \
    chmod -R g=u /some/directory

也就是说,你需要在容器中用到的目录,设置group为0(根组),同时讲用户的权限设置成组的权限去实现。

因为容器用户始终是根组的成员,所以容器用户可以读取和写入这些文件。

根组没有任何特殊权限(与根用户不同),因此这种安排没有安全性问题。

另外,容器中运行的进程不得侦听特权端口(低于1024的端口),因为它们没有以特权用户身份运行。

 

如果需要容器中的用户以特权用户运行,可以做如下设置

oc create serviceaccount runasanyuid
oc adm policy add-scc-to-user anyuid -z runasanyuid -ntest
oc adm policy add-scc-to-user privileged -z runasanyuid -ntest

然后将runasanyuid的SA设置到deployment中。

posted @ 2019-12-27 18:07  ericnie  阅读(701)  评论(0编辑  收藏  举报