[0038] 在配置过程中,为了保证安全,client和master之间是基于ssl和证书进行通信 的;Puppet同时会检测虚拟机镜像的存活状态,如果检测到虚拟机镜像被删除,Puppet会 自动结束相应的配置操作。
[0039] 用户管理对于Linux这样的多用户操作系统而言,用户管理是系统管理中最重要 的组成部分。作为虚拟机镜像的自动化配置系统,需要对创建用户、设定密码、设置用户组、 设置用户shell、h〇me目录的权限等常规操作进行初始化。通过创建Puppet的用户管理配 置文件,可以对虚拟机用户的管理进行自动操作,从系统管理安全性的角度考虑,禁止用户 直接使用用户名和密码登陆系统,而是采用SSHkey登陆系统。所以在创建用户时,为用户 创建好SSH相关的配置信息,而key的内容则是由虚拟机镜像的用户来提供,因为这涉及到 相应的隐私信息。
[0040] 在网络配置管理中,一些常用的操作是设置服务器的域名,设置服务器的DNS,建 立服务器的网络时钟服务以校准时间,在服务器上禁止ipv6(不部署ipv6应用的前提下) 等。可以实现在大规模虚拟机镜像管理时配置不同的域名服务器,这样可以提高域名解析 的速度。
[0041] 安全配置作为虚拟机镜像的初始化安全配置,通常使用iptables来管理防火墙, 建立一些数据包过滤机制和转发机制。通常情况下只打开应用程序所要用到的端口(比如 80端口),以及一些系统管理中的常用服务的端口(比如SSH服务的端口),而禁止掉那些不 需要使用到的端口。
[0042] 而且,源跟踪模块在基于Openstack的云计算平台中,通过Ceilometer API实现 虚拟机镜像。通过配置ceilometer. conf文件,启用Ceilometer对Openstack的支持。
[0043] 通过Ceilometer提供的API,可以获取Openstack中的所有虚拟机镜像文 件的状态,并且可以调用相关接口去查询数据,返回虚拟机镜像所处的生命周期类型。 Notification负责在MQ中监听相关topic的消息(虚拟机快照、回滚等),并把它转换成 Transformer。通过Pipeline定义了这些状态之间的数据流。
[0044] 通过对代码建立对虚拟机镜像的跟踪,当出现相关的订阅事件后,将会产生一个 通知消息,告知虚拟机镜像的状态发生了改变,需要调用版本库维护模块以及过滤器模块 对虚拟机镜像的软件版本进行分析和处理,确保镜像包含依赖模块、补丁和修复程序,保持 彼此之间的版本同步。
[0045] 版本维护库模块,软件包版本库维护模块的工作原理主要是创建一个中心数据 库,这个数据库包含所有需要的检查更新的任务的信息。中心数据库中包括安装包的列表 信息,软件包的版本信息,还有每一个虚拟机使用的升级站点(仓库)列表信息。这些信息在 虚拟机第一次注册的时候就需要导入中心数据库,并且每一次虚拟机发生变化的时候都需 要更新。本方案的设计如4所示,包数据库和仓库数据库都分别有自己的收集器。这使得 补丁信息收集器模块能够更好地适应其他软件管理解决方案。不同仓库可获得的包的信息 储存在升级库数据库中。补丁信息收集器模块会从这些数据和升级库数据库中获取信息, 并且去匹配已安装的包和可获得的包的信息来检查软件是否已经过期,之后将这些信息储 存到离线补丁升级数据库中。
[0046] 软件包分析模块主要包含两部分:
[0047] (1)虚拟机导入模块。Linux平台下有许多的软件包管理工具,如redhat的rpm, Debian的dpkg等。这些包管理工具使用特定格式的数据来保存已安装的软件的相关信息, 如软件名,软件版本,软件包含哪些文件等。另外软件包管理工具特定格式的配置文件来保 存软件升级库(repository)的相关的信息。因此使用不同的软件包管理工具的不同Iinux 发行版必须使用不同的虚拟机导入模块来将前面提到的这些信息保存到补丁信息收集器 中心数据库中。下面针对目前最流行的rpm/yum包管理工具的软件数据库及配置文件相关 信息作具体分析。
[0048] rpm包数据库存放在/var/lib/rpm目录上,该目录下存了一组Berkeley数据库 文件。这些Berkeley数据库文件没有办法直接提取相关信息。因此只能采用rpm-qa命令 从Berkeley数据库文件内提取软件包的信息。使用这种方法可以将离线镜像文件挂载到 镜像安全服务器上,然后使用rpm-qa命令并指定镜像文件内的相应数据库。rpm-qa命令输 出已安装软件的列表。
[0049] Yum可以配置一组软件升级站点,这些配置文件保存在/etc/yum. repos, d目录 内。每一个站点配置文件使用有键-值对的格式,每个站点配置文件都可以包含多个软件 升级库的信息。
[0050] (2)升级软件库导入模块。和软件包管理器一样,不同的在线升级机制也需要使 用不同的数据库来存储远程升级站点相关的信息。因此也需要对不同的升级机制的不同 Iinux发行版必须使用不同的升级软件库导入模块来将站点信息保存到升级库信息数据库 内。Yum升级站点信息是使用xml方式描述的,并且将不同的信息分类存放在不同的xml 文件里,与升级站点存放的软件包的信息全部存放在repodata/repomd. xml文件内〈data type=〃primary〃>元素描述所对应的xml文件中。下面的例子是fedoral6yum升级站点下 repodata/repomd. xml文件的信息。在这个例子中,可以通过查询datatype=〃primary〃标 签下的〈location href/>元素来找到存放站点软件包信息的文件。
[0051] 过滤器分析流程如图5所示:
[0052] ( 1)将上一级过滤器处理过的镜像(如果前面没有过滤器也没有关系)传递给镜像 离线更新补丁过滤器;
[0053] (2)使用探针探测镜像文件。获取一些基本信息如操作系统类型、操作系统版本、 使用的包管理方式等;
[0054] (3)基本探针探测的结果采用对应包管理方式进行相应的处理(以yum包管理方 式为例);
[0055] (4)从镜像文件中提取yum相关的数据库信息;
[0056] (5)将提取出来的yum相关的数据库与最新的yum补丁数据库进行对比;
[0057] (6)将差异部分的最新补丁下载到镜像安全服务器并将最新补丁打到镜像文件 内;
[0058] (7)更新之前提取出来的yum数据库,更新好yum数据库后,将其同步到镜像服务 器内;
[0059] (8)将经过镜像离线更新补丁过滤器处理过的镜像传给下一级过滤器处理。
[0060] 在实施过程中,本系统采用了综合使用直接替换镜像内文件与脚本分析与重写结 合的方法。具体的设计方案如图6所示。
[0061] (1)补丁信息收集器模块会将需要更新补丁的软件包信息传递给离线镜像补丁升 级模块;
[0062] (2)离线镜像补丁升级模块先对升级软件包内的spec文件分析,如果spec文件的 所有脚本代码都是安全的则使用直接替换镜像内文件的方法对镜像更新补丁;
[0063] (3)如果spec文件内存在不安全的脚本代码,则将spec文件传递给脚本分析与重 写子模块;
[0064] (4)脚本分析与重写子模块对传递过来的spec文件进行分析,如果该spec文件中 的所有不安全脚本代码都能成功转化为安全脚本代码。则将该spec文件进行重写。重写 后再利用直接替换镜像内文件的方法对镜像更新补丁。如果该spec文件中的所有不安全 脚本代码不能成功都转化为安全脚本代码(这种情况非常少)。则将该软件补丁包注入到镜 像的特点目录,使用镜像下一次运行时更新补丁方法。因为只有少量的spec文件不能成功 转化为安全的spec,所以该方法的效率非常高。
[0065] RPM软件升级机制:
[0066]RPM包管理器的工作主要是基于rpmSPEC文件。软件制作者通过定义SPEC文件 来规定了RPM管理器所需要的所有信息。SPEC文件可以分成许多节,每一节可以定义一组 的规则。下面是常见的几节:
[0067] (I) Preamle
[0068] 这节中包含包的功能描述、包的软件版本、版权信息和所属