通过阅读网上帖子及浏览相关信息,大家可能会产生一种错觉:Docker 安全性不足,对 Docker 导入生产环境持保守态度。不过实际情况是,虽然我们需要对容器的安全性高度关注,但只要使用得当,完全可以成为一种不低于使用虚拟机或者裸机的安全、高效生产系统。

我个人更喜欢把容器比喻成一种沙箱(Sandbox):每个应用程序都有自己的存储空间;应用程序不能翻过自己的围墙去访问别的存储空间的内容;应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。是不是似曾相识?其实我们的 ISO 应用就是这种方式执行的。

回归正题,事实上,目前行业标准当中所包含的各种准则针对虚拟化技术进行了调整,对于任何想要保护数据的企业来说都可以起到很大帮助作用。使用针对特定行业的标准进行合规审查,可以在很大程度上保证信息处于最佳安全实践的保障之下。安全的信息环境对于企业、客户和员工来说都是至关重要的。

Docker 技术目前还没有对应的认证条款,由于比较新,在数据隔离方面是否能够达到要求还具有不确定性,Docker 的安全性也还不够强健,只要具备 Docker 权限的用户都可以对 Docker 容器进行所有的操作。这无疑将增加审核范围及边界的不确定性。

另外,Docker 在当前阶段还在快速推出更新版本,也存在不兼容的情况,等待未来版本和安全性问题解决之后或许会有文件来指导合规过程。目前我不推荐大家直接用于认证环境。

幸运的是, 关于 Docker 这种虚拟化技术背景的产品,标准要求本身是没有变化的,可以按虚拟技术进行评估。我们可以在业务相关的环境当中将 Docker 作为虚拟化技术的使用准则之一。比如,在 PCI DSS 第 2.2.1 章节当中指出一个虚拟系统组件或者设备只能实现一项主要功能,这正是容器的特点之一。

对于非认证的生产及非生产环境,我这里有一些 Docker 使用上的经验和心得和大家分享一下:

内核安全

所有进程运行在同一个内核中,即使有多个容器,所有的系统调用其实都是通过主机的内核处理,因此该内核中存在的任何安全漏洞都有可能造成巨大影响。如果某套容器系统导致内核崩溃,那么这反过来又会造成整台主机上的全部容器毁于一旦。在虚拟机当中,情况则要好得多:传统的虚拟机同样地很多操作都需要通过内核处理,但这只是虚拟机的内核,并非宿主主机内核。因此万一出现问题时,最多只影响到虚拟系统本身。当然你可以说先攻破 Hypervisor,再攻破 SELinux,然后攻破宿主主机内核就可以控制宿主机上的所有虚拟机,先不说虚拟机发展这么多年存在的漏洞还有多少,光虚拟机内核 → Hypervisor → SELinux → 宿主主机内核这几层的隔离的安全性和容器就不是一个数量级上的。所以建议大家密切关注内核的安全。在内核安全的合规建设上,虚拟机和容器的要求是一致的,大家完全可以遵从当前的行业标准。

拒绝服务攻击

所有容器都共享同样的内核资源。如果某套容器能够以独占方式访问某些资源,那么与其处于同一台主机上的其它容器则很可能因资源匮乏而无法正常运转。这正是拒绝服务攻击(简称DDoS)的产生原理,即合法用户无法对部分或者全部系统进行访问。在这方面大家亦可参考虚拟机时代的经验,预估应用的资源消耗上限,设计更多的 Cgroups,用于控制那些打开过多文件或者过多子进程等资源的进程,对容器资源进行限制,如 CPU 使用率,内存上限等,虽然容器的隔离性没虚拟机那么彻底,但至少能保证业务的连续性。

镜像安全

还有一部分来自于镜像本身的安全。由于 Docker Hub 上的镜像成千上万,甚至国内各种 PaaS 云服务公司提供的镜像仓库,如果攻击者诱导用户下载由其精心设计的镜像,那么运行的主机与数据都将处于威胁之下。建议大家使用可靠来源甚至是官方的镜像,并检查是否存在篡改。同样的,大家还需要确保自己运行的镜像为最新版本,且其中不包含任何存在已知安全漏洞的软件版本。

用户权限

如果大家在容器内拥有 root 权限,那么在主机上亦将具备 root 身份。在系统中非 root 用户只要加入 Docker 用户组,就无需使用 sudo 的情况下运行 Docker 命令。同样,添加了 –privileged 参数运行的容器也将获得主机的完全控制权。这种情况,首先,建议大家尽量不要使用 –privileged 参数,若实在有业务需求,可以将所有需要 –privileged 参数的容器严格控制在一台或某几台主机以隔离其他容器。其次,建议大家配合 sudo 来增加用户的审计和日志功能,在 /ect/sudoers 中添加以下内容:user ALL=(ALL) /usr/bin/docker,这样 user 使用 Docker 命令的时候需要密码验证,并会在系统中记录所有的操作日志用于审计。

文件完整性

有些 Linux 系统的内核文件系统必须要 mount 到容器环境里,否则容器里的进程就会罢工。这给恶意进程非常大的便利,但是大部分运行在容器里的 App 其实并不需要向文件系统写入数据。基于这种情况,建议在 mount 时使用只读模式,如 –v /etc/localtime:/etc/localtime:ro。

总之通过适配、加固的 Docker 容器方案,在安全性上完全可以达到商用标准。就是可能对实施人员的技术要求和门槛较高。

原文链接:http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=2649690923&idx=1&sn=3741c618f186058bae628cc4bb669bb3&scene=4#wechat_redirect

浅谈 Docker 安全合规建设的更多相关文章

  1. 有容云:上车 | 听老司机谈Docker安全合规建设

    编者注: 本文根据7月19日DockOne社群分享内容整理而成,分享嘉宾蒋运龙,有容云高级咨询顾问,一个IT的老兵,十年来混迹于存储.三网融合.多屏互动.智能穿戴.第三方支付.Docker等行业:经历 ...

  2. PCI DSS合规建设ASV扫描介绍

    最近查一些Nessus.Nexpose漏洞扫描工具相关资料,工具介绍都会提到一些审计功能,其中最常见的就是PCI DSS合规性审计.从网上找到一篇介绍较详尽的文章,与大家分享. 原文摘自:http:/ ...

  3. 浅谈Docker(一)

    注:由于别人写的太好了就转来基础介绍! 转自:http://www.infoq.com/cn/articles/docker-core-technology-preview Docker是PaaS供应 ...

  4. 浅谈iOS IPv6-only 新规

    5月份苹果发布新规,对于开发人员只需要做到以下几点就能顺利上线啦! 1.苹果从6月1日起,提供App Store审核的应用必须要兼容面向硬件识别和网络路由的最新互联网协议--IPv6-only标准.也 ...

  5. 庞玉栋:浅谈seo优化对于网站建设的重要性

    根据最近做SEO优化经验而写  写的也都是我的方法 大神勿喷 SEO:英文Search Engine Optimization缩写而来, 中文意译为搜索引擎优化 如果你连个网站都没有那就点这里:如何拥 ...

  6. 浅谈中大型企业CMDB的建设

    作者:嘉维蓝鲸产品总监,贺勇 针对CMDB这个主题,之前一直想写一篇文章来表达我的看法,但是之前一直不敢写,为什么?因为CMDB这个主题属于一提大家都懂,但是深入讨论大家都晕菜的一个话题:在2018年 ...

  7. 浅谈Docker

    一.为什么使用Docker 软件开发最大的麻烦事之一,就是环境配置.很多人想到,能不能从根本上解决问题,软件可以带环境安装? 也就是说,安装的时候,把原始环境一模一样地复制过来. 目前有两个主流解决方 ...

  8. 浅谈Docker(二)

    Docker使用cgroup实现CPU,内存和磁盘IO等系统资源的限制. CPU Docker现在有2个与CPU资源相关的参数,-c可以指定CPU的占比,--cpuset可以绑定CPU.例如,指定容器 ...

  9. 浅谈Hybrid技术的设计与实现第三弹——落地篇

    前言 接上文:(阅读本文前,建议阅读前两篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 根据之前的介绍,大家对前端与Native的交互应该有一些简单的认识了,很多 ...

随机推荐

  1. 利用Java反射机制优化简单工厂设计模式

    之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...

  2. day008-python内置函数

    一.ptthon内置函数 二.内置函数详细概述 2.1  abs(x):函数返回数字的绝对值. 注意: 1)x -- 数值表达式,可以是整数,浮点数,复数. 2)如果参数是一个复数,则返回它的大小. ...

  3. 顶部选项卡-可左右拖动(webview)示例如何做到tab与webview联动滚动

    顶部选项卡-可左右拖动(webview)的示例中,如何做到tab与webview联动滚动,效果类似uc头条一样 ps:自己也不确定有多少了到航头,页面怎么办,到航头从后台获取,页面不可能建N多个.ht ...

  4. python3 安装 pillow报错

    前言 最近要使用pillow库, 来训练验证码模型, 但是死活都安装不上 环境 docker中安装, python3 尝试安装 pip install pillow easy_install Pill ...

  5. .NET总结--WebService 配置与设置,发布

    发环境 OS:win10 企业版 开发工具:VS2017 IIS版本:6.0 .NET版本:4.6.1 Web Service 简介 Web Service也叫XML Web Service WebS ...

  6. 前端零基础入门:页面结构层HTML(2)

    学习笔记 若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理. 请点赞!因为你们的赞同/鼓励是我写作的最大动力! 欢迎关注达达的简书! 这是一个 ...

  7. Flume 实战,将多台机器日志直接收集到 Kafka

    目前我们使用的一个 b 端软件的报错日志分散在集群各处,现在想把它收集到一个地方然后统一丢进 Kafka 提供给下游业务进行消费. 我想到了 flume,之前让同事搭建的这次自己想多了解一些细节于是就 ...

  8. js中实现函数防抖跟函数节流

    最近刚接触两个新概念函数防抖与函数节流,虽然这些内容网上可以搜到很多,大家都有自己的一套的理解方式,都写得很好, 而自己则想在理解的基础上自己把代码实现一遍,加深印象. 一.函数防抖 假如我们有这样的 ...

  9. pycharm配置默认代码和注释模板

    有人问,在pycharm新建python文件时,文件开头的注释每次都要重复写,能不能配置成模板?其实pycharm本身自带此功能 在pycharm菜单栏找File -> settings -&g ...

  10. attempt to call method 'getDataString' (a nil value)

    错误: LUA ERROR: [: attempt to call method 'getDataString' (a nil value) 在合并cocos和quick的时候,在EventCusto ...