一、程序
1、程序代码存储位置
- 方案一:存储在共享存储中
- 方案二:存储到docker容器中
二、安全防护与配置
1、Linux内核的命名空间机制提供的容器隔离安全
命名空间提供了最基础也是最直接的隔离。通过命名空间来实现的隔离并不是那么绝对。运行在容器中的应用可以直接访问系统内核和部分系统文件。所以,用户必须保证容器中应用时安全可信的,否则本地系统将可能受到影响,必须保证镜像的来源和自身可靠。
docker1.3.0对镜像管理引入了签名系统,用户可以通过签名来验证镜像的完整性和正确性。
2、Linux控制组机制对容器资源的控制能力安全
控制组是Linux容器机制中的另外一个关键组件,它负责实现资源的审计和限制。
当单容器受到供给或出现异常时,可以保证本地系统和其他容器正常运行而不受影响,从而避免引发“雪崩”灾难。
3、Linux内核的能力机制所带来的操作权限安全
能力机制(capability)是Linux内核一个强大的特性,可以提供细粒度的权限访问控制。
默认情况下,docker启动的容器被严格限制只允许使用内核的一部分能力。使用能力机制对加强docker容器的安全性有很多好处。
大部分情况下,容器并不需要“真正的”root权限,容器只需要少数的能力即可。为了加强安全,容器可以禁用一些没必要的权限。这样攻击者取得了root权限,也不能获得本地主机的较高权限,能进行的破坏有限。
- 禁止任何文件挂载操作
- 禁止直接访问本地本地主机的套接字
- 禁止访问一些文件系统的操作,比如创建新的设备、修改文件属性等
- 禁止模块加载
4、docker程序(服务端)本身的抗攻击性
使用docker容器的核心是docker服务端。docker服务的运行目前还需要root权限的支持,因为服务端安全性十分重要。
必须只有可信的用户才能访问到docker服务。docker允许用户在主机和容器见共享文件夹,同时不需要限制容器的访问权限,这就容易让容器突破资源限制。当提供同期创建服务时,要更加注意进行参数的安全检查,防止恶意的用户用特定参数来创建一些破坏性容器。
docker的REST API使用本地的Unix套接字,保护服务端。Linux命令空间机制将可以实现使用非root用户来运行全功能的容器。
5、其他安全增强机制(selinux等)对容器安全性的影响
docker默认只启用了能力机制,用户可以选择启用更多的安全方案(selinux)来加强docker主机的安全。
- 在内核中启动GRSEC和PAX,这将增加更多的变异和运行时的安全检查;并且通过地址随机化机制来避免恶意探测。启用该特性不需要docker进行任何配置。
- 用户可以自定义访问控制机制来定制安全策略。
- 在文件系统挂载到容器内部时候,可以通过配置只读(read-only)模式来避免容器内的应用通过文件系统破坏外部环境
6、通过第三方工具对docker环境的安全性进行评估
自动化检查的开源工具,比较出名的有dockerbench和chair。
三、重建docker网络
相信有人也遇到过,在做一些iptable 相关操作时,直接 iptable -F将其清空后的,容器网络无法使用的。
1、重建docker网络即可。具体步骤如下: