使用Docker时的一些安全建议
定期升级宿主机内核
由于Docker容器和宿主机是共用内核的,所以如果内核存在漏洞的话别人可以在容器里拿到宿主机的权限,比如dirtycow-docker-vdso
Docker创建容器时不要使用 “--privileged” 属性
为什么说 privileged 不安全呢?看到一个利用 Unix socket 来传递文件描述符最终读取其他用户文件(flag)的例子:32C3 CTF: Docker writeup。这个例子里因为 Docker 容器运行时指定了 --net=host,所以容器内可以访问宿主机的网络资源。 由于 privileged 会给予容器所有的 Capabilities,那么当 docker run 时加上了 --privileged 时或许产生更大的隐患。
Docker的非官方镜像不一定是安全的
由于Docker官方公开镜像仓库里的内容是所有的人都取用并修改后二次发布的,所以你不能绝对信任非官方发布的镜像,在创建容器前最好使用如 DockerBench、Clair 等扫描镜像后在使用它们
其次还可以使用 Docker 安全加固工具,如 Docker Security Scanning 等,可以帮助检测镜像中的漏洞。
对镜像进行审核,包括对镜像文件系统进行审查、对镜像中安装的软件进行审核、对镜像中运行的进程进行审核等。
及时更新镜像,保持镜像的最新性,以便及时修复漏洞。
在生产环境中运行镜像时,应该使用容器安全组以限制容器的行为,并监控容器的运行情况,及时发现和修复漏洞。
总的来说,排查镜像漏洞的方法需要结合实际情况进行选择,可以采取多种方法综合排查。
定期升级你的Docker
Docker作为一款软件,本身也会存在漏洞,所以也需要定期去Update Version,你还可以关注一下CVE发布的Docker漏洞
使用容器时重要的重要的数据目录一定不要只存储在容器中
如MySQL的datadir路径,Redis的data路径,ES的path.data路径,一定要在宿主机上最好备份,不然容器删掉了就什么都没有了