docker容器的生命周期,就是一个镜像文件从产生、运行到停止的过程。可将docker生命周期拆为两个大阶段,非生产环境阶段和生产环境阶段,非生产环境中保证镜像安全可信,生产环境中保证镜像正确的运行。保证非生产环境中的镜像安全应遵循以下方面:
容器使用非root用户运行
为了防止容器逃逸而获得宿主机的权限,容器内应用以非root用户身份运行,如果用户已经在容器镜像中定义,则默认情况下容器将作为该用户运行,且不需要特定的用户命名空间重新映射。可以在Dockerfile中添加用户:
RUN useradd -d / home /username -m -s / bin / bash username USER username
使用安全的基础镜像
如果基础镜像存在安全问题,那整个镜像文件的安全性也无从谈起,用户可根据自身需求定制基础镜像,并强制要求组织内使用认可的基础镜像;也可使用第三方安全的镜像,这里推荐使用Alpine-linux,docker所有的官方镜像都使用其作为基础镜像,docker也会对其维护更新,所以安全性有保证。
删除镜像中的setuid和setgid权限
setuid和setgid权限可用于提权。虽然有时候必须要使用到,但如果被滥用,可能会导致非法的提升权限。可以在镜像中限制这些权限的使用。具体做法可参考:在构建镜像时通过在Dockerfile中添加以下命令来删除这些权限,一般在Dockerfile的末尾添加:RUN find / -perm +6000-type f-exec chmod a-s {} \;|| true
启用Docker的内容信任
内容信任允许当用户使用远程Docker仓库进行操作时,以执行镜像标记的客户端签名和验证。内容信任提供了对从Docker仓库发送和接收的数据使用数字签名的能力。这些签名允许客户端验证特定镜像标签的完整性。
对镜像进行安全漏洞扫描
镜像中包含了很多的插件及软件包,需要对这些软件包进行漏洞扫描,并根据结果安装补丁或更新软件,Coreos提供了一款开源docker镜像安全扫描器-Clair,Clair可对镜像文件进行静态的安全扫描,并结合CVE给出漏洞扫描结果。
西部数码的容器云是通过docker技术,在集群服务器上部署容器服务实现,拥有上万Linux镜像,功能强大、简单易用,可轻松作集群服务,自由组网、安全可靠。
高性价比的容器云产品链接 https://www.west.cn/paas/container/