作者简介: 辭七七,目前大二,正在学习C/C++,Java,Python等
作者主页: 七七的个人主页
文章收录专栏: 七七的闲谈
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
前言
Docker 是一个
开源的应用容器引擎
,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的
Linux或Windows
操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的工具实践及root概念和Docker容器安全性设置
1. 工具实践
Docker推出的一个名为Docker Content Trust(DCT)的新功能,它可帮助IT专业人士确保Docker的安全性
。DCT使用了一个公共密钥基础设施(PKI)的方法,它提供了两个不同的密钥:一个离线(root)密钥和一个标记(每次入库)密钥,当第一次发布者推出镜像时它可创建和存储客户端。
此举有助于弥补正在使用恶意容器这一最大的漏洞。DCT还生成了一个时间戳密钥,它可保护系统免受重放攻击,
即运行过期的标记内容
。这解决了上面提及容器具有不同安全补丁等级的问题。
为了解决针对容器安全性的问题,
包括Docker在内的众多公司都为Docker发布了安全基准
。这套标准为确保Docker容器的安全性提供了指导。全篇118页的文档囊括了部署Docker容器的84个最佳实践以及一个涉及所有内容的检查清单。
如果用户
决定自行负责确保Docker容器的安全性
,但又不知道从何入手,这里提供了一些建议:
阅读上面提及的Docker安全基准文件。重点关注与如何部署基于容器的应用程序相关的建议和最佳实践。这真的是有助于缓解财务压力,认真考虑大部分因糟糕设计而导致的Docker安全性问题。
考虑特定安全性需求。
这将促使选择正确的工具和方法
。很多使用容器技术的企业对于他们基于容器的应用程序要么安全措施不足,要么安全措施过足。
尽可能多地进行测试。容器技术是新技术,因此需要搞清楚哪些是能够发挥作用,哪些是无用的,而要做到这一点的方法就是进行安全性方面的测试,例如
渗透测试
。
容器安全性的发展趋势可能会与虚拟化安全性一样。虽然安全性从第一台虚拟机部署开始就是一个问题,但是多年以来积累下来的良好安全性实践、架构和工具都证明了其有效性。鉴于此,
Docker容器安全性的问题也同样能够得到较好解决
。
下面讲解一下工具实践内所介绍的内容
2. root概念
root,也称为根用户,是Unix(如Solaris、AIX、BSD)和类UNIX系统(如Linux、QNX等),及Android和iOS移动设备系统中的唯一的超级用户,因其可对根目录执行读写和执行操作而得名。
其相当于Windows系统中的SYSTEM(XP及以下)/TrustedInstaller(Vista及以上)用户
。其具有系统中的最高权限,如启动或停止一个进程,删除或增加用户,增加或者禁用硬件,新建文件、修改文件或删除所有文件等等。
2.1 背景介绍
现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,
计算机对这些用户分配一定的资源,普通用户在所分配到的资源内进行各自的操作,相互之间不受影响
。但是这些普通用户的权限是有限制的,且用户太多的话,管理就不便,从而引入root用户,此用户是唯一的,且拥有系统的所有权限。root用户所在的组称为root组。“组”是具有相似权限的多个用户的集合。
2.2 权限设置
root用户是系统中唯一的超级管理员,它具有等同于操作系统的权限。一些需要root权限的应用,譬如广告阻挡,是需要root权限的。可问题在于root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用。所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机。所以,
在Unix、Linux及Android中,除非确实需要,一般情况下都不推荐使用root
。最好单独建立一个普通的用户,作为日常之用。
2.3 安全性
不推荐使用root的一个原因则是出于安全的考虑。root具有系统所有的权限,root密码如果泄漏,足以导致整台计算机完全被窃取root密码的人所控制,拥有root密码就意味着拥有了这台计算机上所有用户的所有数据。
有些任务必须由root才能执行,例如删除系统内置应用程序。但在Unix或Linux系统中又不推荐使用root,这构成了一个矛盾。于是产生了一个sudo的做法,就是在必要时使用su提权,
即把系统管理的一部分权限授予普通用户,并且只有在这些用户需要更高权限的时候,才允许这些用户暂时性的使用root命令来管理系统
。
在默认情况下root的根目录(/root)是其他用户无权访问的,这在一定程度上增强了整个系统的安全性,但不完全是
。Unix、Linux及Android的安全性更在于它的高度可配置性,也就是说,Unix或者Linux的安全性更取决于系统管理员而不是Unix或Linux系统本身。一般的模式是:Unix、Linux和Android提供一种健全的安全机制,由系统管理员根据实际需要制定相应的安全策略,并且部署这些安全策略。
“机制”是能做什么不能做什么,“策略”是要做什么不要做什么
。而Windows的安全策略和安全机制则比较混乱,windows本身过于依赖安全策略,导致系统管理员在很多时候束手束脚,反而得不偿失。
3. 时间戳的概念
时间戳是使用数字签名技术产生的数据,
签名的对象包括了原始文件信息、签名参数、签名时间等信息
。时间戳系统用来产生和管理时间戳,对签名对象进行数字签名产生时间戳,以证明原始文件在签名时间之前已经存在。
可信时间戳是由联合信任时间戳服务中心签发的一个电子凭证,用于证明电子数据文件自申请可信时间戳后内容保持完整、未被更改。可信时间戳接入核准书的颁发,
标志着可信时间戳在档案领域规范化应用已经开始,并将起到电子档案和档案数字化副本内容防篡改、保障档案的法律凭证的作用
。根据《电子签名法》有关数据电文原件形式的要求,申请了可信时间戳认证的电子文件、电子档案或纸质档案的数字化副本等可视为法规规定的原件形式。
4. Docker容器
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化
。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
4.1 安全性设置
- 定期渗透测试,安全审计;
- 尽量采用image的正规镜像来源,相对于传统安全,容器安全受质疑很大程度上是在于镜像的维护及升级,因此在镜像源头保证安全和及时更新;
- 及时升级容器服务,比如
采用rollingupdate的方式对跑服务的容器进行升级等方式
。
4.2 迁移步骤
步骤1:分解
一般来说,应用程序都是复杂的,它们都有很多的组件。例如,
大多数应用程序都需要数据库或中间件服务的支持以实现对数据的存储、检索和集成
。所以,需要通过设计和部署把这些服务拆分成为它们自己的容器。如果一个应用程序能够被拆分成为越多的分布式组件,那么应用程序扩展的选择则越多。但是,分布式组件越多也意味着管理的复杂性越高。
步骤2:选择一个基础映像
当执行应用程序迁移时,应尽量避免推倒重来的做法。搜索
Docker注册库找到一个基本的Docker映像并将其作为应用程序的基础来使用
。
随着时间的推移,企业将会发现这些Docker注册库中基本映像的价值所在。
步骤3:解决安全性和管理问题
安全性和管理应当是一个高优先级的考虑因素;
企业用户不应再把它们当作应用程序迁移至容器的最后一步
。反之,企业必须从一开始就做好安全性和管理的规划,把它们的功能纳入应用程序的开发过程中,并在应用程序运行过程中积极主动地关注这些方面。这就是企业应当花大功夫的地方。
步骤4:增加代码
为了创建映像,企业用户需要使用一个Dockerfile来定义映像开发的必要步骤。一旦创建了映像,企业用户就应将其添加至Docker Hub。
步骤5:配置、测试、部署
应对在容器中运行的应用程序进行配置,
以便于让应用程序知道可以在哪里连接外部资源或者应用程序集群中的其他容器
。企业用户可以把这些配置部署在容器中或使用环境变量。
最后,把容器部署到实际生产环境中。为了积极主动地关注基于容器的应用程序的运行状况,可考虑实施必要的监控和管理机制 。确保打开日志记录功能。
4.3 特性
Docker容器与其他的容器技术都是大致类似的
。但是,Docker在一个单一的容器内捆绑了关键的应用程序组件,这也就让这容器可以在不同平台和云计算之间实现便携性。其结果就是,Docker就成为了需要实现跨多个不同环境运行的应用程序的理想容器技术选择。
Docker还可以让使用微服务的应用程序得益,所谓微服务就是把应用程序分解成为专门开发的更小服务。
这些服务使用通用的RESTAPI来进行交互
。使用完全封装Docker容器的开发人员可以针对采用微服务的应用程序开发出一个更为高效的分发模式。
关于【Docker】Docker的工具实践及root概念,时间戳的概念和Docker容器安全性设置的详解,七七就先分享到这里了,如果你认为这篇文章对你有帮助,请给七七点个赞吧,如果发现什么问题,欢迎评论区留言!!💕💕
版权归原作者 辭七七 所有, 如有侵权,请联系我们删除。