Docker是基于 Linux操作系统实现的应用虚拟化。运行在容器内的进程,与运行在本地系统中的进程在本质上并无区别,因此,配置的安全策略不合适将可能给本地系统带来安全风险。Docker的安全性在生产环境中是十分关键的衡量因素。Docker容器的安全性,在很大程度上依赖于 Linux系统自身。目前,在评估 Docker的安全性时,主要考虑下面几个方面:
- Linux内核的命名空间机制提供的容器隔离安全;
- Linux控制组机制对容器资源的控制能力安全;
- Linux内核的能力机制所带来的操作权限安全;
- Docker程序(特别是服务端)本身的抗攻击性;
- 其他安全增强机制(包括 AppArmor、SELinux等)对容器安全性的影响;
- 通过第三方工具(如 Docker Bench工具)对 Docker环境的安全性进行评估。
1.命名空间隔离的安全
当用 docker run 命令启动一个容器时, Docker 将在后台为容器创建一个独立的命名空间。 命
名空间提供了最基础也是最直接的隔离, 在容器中运行的进程不会被运行在本地主机上的进
程和其他容器通过正常渠道发现和影响。
通过命名空间机制,每个容器都有自己独有的网络栈,意味着它们不能访问其他容器的套接字(socket)或接口。从网络架构的角度来看, 所有的容器实际上是通过本地主机的网桥接口(docker0)进行相互通信, 就像物理机器通过物理交换机通信一样。
与虚拟机方式相比,通过命名空间来实现的隔离并不是那么绝对。运行在容器中的应用可以直接访问系统内核和部分系统文件。因此,用户必须保证容器中应用是安全可信的(这跟保证运行在系统中的软件是可信的一个道理),否则本地系统将可能受到威胁,即必须保证镜像的来源和自身可靠。Docker自1.3.0版本起对镜像管理引入了签名系统,加强了对镜像安全性的防护,用户可以通过签名来验证镜像的完整性和正确性。