docker_practice/security/kernel_capability.md

1.8 KiB
Raw Blame History

##内核权限 默认情况下Docker启动的容器被严格限制只允许使用内核的一部分权限capability包括如下几个方面。

Linux系统支持细粒度的权限访问控制系统。比如一个Web服务进程只需要绑定一个低于1024的端口并不需要特权权限。那么它只需要被授权net_bind_service功能就可以了。此外,还有很多其他的类似功能,避免获取特权权限。

这对加强Docker容器的安全有很多好处。通常在服务器上会运行一堆需要特权权限的进程包括有ssh、cron、syslogd硬件管理工具模块例如负载模块、网络配置工具等等。容器跟这些进程是很不同的因为大部分进程都可由容器外的支持系统来提供管理。

  • ssh访问可被主机上ssh服务来管理
  • cron应该作为用户进程执行
  • 日志系统可由Docker或第三方服务管理
  • 硬件管理无关紧要容器中也就无需执行udevd以及类似服务
  • 网络管理也都在主机上设置,除非特殊需求,容器不需要对网络进行配置。

从上面的例子可以看出大部分情况下容器并不需要“真正的”root权容器只需要少数的权限即可。为了加强安全容器可以禁用一些没必要的权限。

  • 完全禁止任何mount操作
  • 禁止直接访问本地主机的套接字;
  • 禁止访问一些文件系统的操作,比如创建新的设备、修改文件属性等;
  • 禁止模块加载。

这样就算攻击者在容器中取得了root权限也不能获得本地主机的较高权限能进行的破坏也有限。

默认情况下Docker采用白名单机制禁用必需功能之外的所有权限。 当然,用户可以根据需求来启用额外的权限。