容器逃逸问题主要是docker\runc等基础软件的漏洞引起,虽然发生概率低,但破坏性大,一旦逃逸,可能会使得黑客拿到宿主机权限,从而对基础设施造成破坏性攻击。直接影响到了承载容器的底层基础设施的保密性、完整性和可用性。
在运行容器的时候,如何容器的使用不合理会造成容器逃逸等安全问题,所以启动容器就要给容器赋予最小权限,可以从如下两个方面考虑:一、赋予容器合理的capabilities, 二、在容器中以非root用户运行程序。
首先:Linux capabilities是把root用户的所有的特权做了分化,当我们启动不同功能的进程就要给容器赋予不同的权限,例如进程运行iptables命令,就要给容器赋予CAP_NET_ADMIN这个capability。
其次:是尽量不用特权用户启动容器,一般是用root用户,系统默认会带有15个capabilities,当发现容器进程权限不够的时候,需要根据使用情况整理capabilities集合,而不是直接赋予privileged权限。另外当我们在K8s运行容器需要特权用户权限挂载块存储并创建目录时,尽量通过InitContainer赋予较高权限来完成改操作。