Docker学习--安全介绍

260 阅读3分钟

一、内核名字空间

  • 当使用docker run运行一个容器时,Docker后台会为容器创建一个独立的名字空间和控制组集合
  • 独立的名字空间提供了最基础也是最直接的隔离,使得在容器中运行的进程不会被主机上的进程和其他容器发现和作用
  • 每个容器用头自己独立的网络栈,无法访问其他容器的sockets或接口。但可以通过配置来使两个容器之间进行交互。


二、控制组

  • 控制组负责实现资源的审计和限制
  • 控制容器之间公平地分享主机的内存、CPU、磁盘IO等资源
  • 确保容器内资源使用产生压力时不会连累主机系统
  • 可以防止服务(DDOS)攻击


三、Docker服务端的防护

  • Docker的REST API(客户端用来和服务端通信)使用本地的Unix套接字替代了TCP套接字,后者容器遭受XSS(跨站脚本攻击)
  • 可以使用安全机制,确保只有可信的网络或VPN,或证书保护机制下的访问可以进行
  • 可以使用HTTPS和证书来加强保护
  • 可以采用专用的服务器来运行Docker和相关的管理服务(例如ssh监控和进程监控、管理工具nrpe、collectd等),其他业务服务放到容器中运行


四、内核能力机制

  • 可以提供细粒度的权限访问控制
  • 默认情况下,Docker启动的容器被严格限制只允许使用内核的一部分能力
  • 特权进程均由容器以外的支持系统来进行管理:
    • ssh访问被主机上ssh服务
    • cron通常应该作为用户进程执行,权限交给使用它服务的应用来处理
    • 日志系统可由Docker或第三方服务管理
    • 硬件管理无关紧要,容器中也就无需执行udevd以及类似服务
    • 网络管理也都在主机上设置,除非特殊需求,容器不需要对网络进行配置
  • 还可以禁用一些没必要的权限
    • 完全禁止任和mount操作
    • 禁止直接访问本地主机的套接字
    • 禁止访问一些文件系统的操作,比如创建新的设备、修改文件属性等
    • 禁止模块加载


五、其他安全特性

可以采用多种方案来加强Docker主机的安全:

  • 在内核中启用GRSEC和PAX,这将增加很多编译和运行时的安全检查,通过地址随机化避免恶意探测等。启用该特性不需要Docker进行任何配置
  • 使用一些有增强安全特性的容器模块,例如带AppArmor的模板和Redhat带SELinux策略的模板,这些模板提供了额外的安全的特性
  • 用户可以自定义访问控制来定制安全策略