专栏首页云服务与SRE架构师社区【原创干货】我是如何为公有云和XX联邦政府提供安全的Linux操作系统的解决方案的?

【原创干货】我是如何为公有云和XX联邦政府提供安全的Linux操作系统的解决方案的?

我大约是在2012年左右时,在网络和私有云两大领域之外,又在操作系统领域得到一个非常有挑战的新机遇:为公司超过30万台的服务器提供安全的Linux操作系统解决方案,并为操作系统领域提供24x7应急响应和支持服务(Tier 3 Escalation)。我得到Linux社区一些朋友的帮助,在较短的时间内快速成立了一个研发团队,其中一位技术大拿是看到我们这个领域的大牛左耳朵耗子转发贴子后和我取得联系并加入的。我们最终在Linux领域交付的产品,内部的名字叫“APOL Image” (基于Oracle Linux 和Oracle VM Server),以及相关用于操作系统安全评估、修复和强化的工具集。解决方不仅应用企业内部的部署,还应用于公有云和一些特别需求的外部客户,包括XX联邦政府。在2018年,团队成员在美国旧金山的Oracle OpenWorld 2018上发表了主题为《Perform In-Place Upgrade for Large Scale Cloud Infrastructure》的演讲,将部分经验分享了出来。

本文就已经公开的部分信息,简要地概述一下我们是如何提供安全的Linux操作系统解决方案的。

一、最小化安装

(一)决定最小化安装包清单的基本原则

我们的解决方案是基于Oracle Linux(OL,以前称为Oracle Enterprise Linux),是由Oracle自行分发的Linux发行版,自2006年底以来部分由GNU通用公共许可证提供。它是从Red Hat Enterprise Linux(RHEL)源代码编译而来,用Oracle代替Red Hat品牌。它有很多针对Oracle产品的加强和Bug Fix,也被Oracle云和Oracle集成系统(如Oracle Exadata等)使用。

在安装Oracle Linux的系统上,我们建议删除不需要的RPM,以最小化软件占用空间。那么,我是如何确定这个最小化清单呢?

最小化清单包括如下几点:

(1)基础包 (@core Yum groups),以及其依赖的软件包。

(2)Oracle UEK 内核 (kernel-uek,kernel-uek-firmware,kernel-uek-devel)。

(3)安装RDBMS数据库所依赖的软件包 (oracle-rdbms-server-12cR1-preinstall etc., 但是不包括RDBMS数据库或preinstall本身)

(4)JVM 或 Oracle Java JDK 所依赖的软件包(不包括JVM/JDK本身)

(5)VNC Server (tigervnc-server or vnc-server) 所依赖的软件包(不包括tigervnc-server/vnc-server本身,也不包括X WINDOWS)

(6)一些通用的基础软件包,例如 audit.x86_64, authconfig.x86_64等等。 

(8)运维所需要的额外的软件包,包括安全工具(比如setools)、我们自己定制的性能数据收集软件包(Oracle OSWatcher)、硬件管理数据包(oracle-hmp-tools.x86_64, MegaCli.noarch,smartmontools.x86_64, lldpd.x86_64)。

(二)对每个OL版本,使用CHROOT来生成原始的最小化软件包清单

我们使用CHROOT测试并生成每个OL版本的最小化包列表的初始版本。其中,首先要安装oraclelinux-release软件包。 在release安装正确后,我们可以运行yum,使用“--installroot”选项在chroot目录中安装其他软件包了。

以下是生成包列表的示例过程。

CHROOT=./CHROOT

CDROM=./CDROM

YUM_REPO_FILE=yum_repo.repo

mkdir -p ${CDROM}

mount -o loop,ro $ISO_FILE ${CDROM}

cat > $YUM_REPO_FILE <

[main]

include=/etc/yum.conf

plugins=1

group_package_types=mandatory

[rpm_footprint_dvd]

name=rpm_footprint_dvd

baseurl=file://${CDROM}/Server

gpgkey=file://${CDROM}/RPM-GPG-KEY

gpgcheck=0

enabled=1

[rpm_footprint_addons]

name=rpm_footprint_addons

...skip....

[rpm_footprint_uek]

name=rpm_footprint_uek

...skip....

EOF!

mkdir -p ${CHROOT}

mkdir -p ${CHROOT}/var/lib/rpm

rpm --rebuilddb --root=${CHROOT}

yumdownloader -c $YUM_REPO_FILE --disablerepo=* --enablerepo=rpm_footprint* --installroot=${CHROOT} oraclelinux-release

rpm --root=${CHROOT} -ivh --nodeps $LINUX_RELEASE

yum -c $YUM_REPO_FILE --disablerepo=* --enablerepo=rpm_footprint* --installroot=${CHROOT} groupinstall -y "Core"

rpm --root=${CHROOT} -ivh --nodeps $KERNEL_UEK

# Install DB and Java, and Others

yum -c $YUM_REPO_FILE --disablerepo=* --enablerepo=rpm_footprint* --installroot=${CHROOT} install -y $PKG

# Remove the Java JDK and RDBMS preinstall packages

yum -c $YUM_REPO_FILE --disablerepo=* --enablerepo=rpm_footprint* --installroot=${CHROOT} erase -y $PKG

# Get the rpm list

rpm --root=${CHROOT} -qa --qf '%{n}-%{v}-%{r}.%{arch}.rpm\n' |sort > rpm-list.txt

(三)审核最小化软件包清单

审核每个软件包的来源、功能,以及是否真的必要将其收入用于产生环境的Linux Base Image中。

二、LINUX配置的最佳实践指南

有了软件包清单,接下来是决定相关的配置了。

(一)优化配置

我们基于超过30万的服务器的运维状态、以及超过1万条Bug的研究分析,提炼出了一个针对生产环境的Oracle Linux配置最佳实践指南,涉及Oracle Linux, OVM dom0, Xen 和硬件Firmware。我们对待服务器的Outage事件上,采取的是策略是:“Fix one fix all”。

这个实践指南是一个持续更新的基于专家知识的文档,为产品、运维和信息安全部门提充分的Linux配置信息以供审核和反馈。内容包括了NTP客户端配置、SysLog、Cron、Sshd、Ulimit、Banner、审计、SELinux、串行控制台设置、NUMA、Cstate、Xen配置、NFS客户端、Sysctl设置(优化的参数包括了文件系统、网络、错误修复、网络性能、网络安全、虚拟内存、OOM killer调整、vm.nr_hugepages、内核消息、内核Semaphores、共享内存、kernel.sysrq等等)、LDAP客户端、ipmitool和HMP、DNS客户端、Timezone、Mcollective、Puppet客户端、邮件和Sendmail、默认启用的服务、LLDP、OS Watcher、EM和EMAgent、磁盘布局、RAID和LVM、文件系统、网络和Yum等等。

(二)创建特定的user和groups

(三)删除不需要的软件包和服务以进行操作系统安全强化

(四)磁盘空间布局标准化

(五)更新kickstart模版

我们使用kickstart模板来自动构建新版本的Linux系统,所有配置变更都须在kickstart体现出来。另外,我的一位同事写了个很棒的工具,可以将新版本的kickstart模板和老版本的差别自动转化为“零停机时间”的升级程序。

三、安全检查

一个新版本的OS Image准备就绪后,除了常规的功能、性通、整合测试外,我们还需要进行安全测试。

我们的安全检查包括CIS-CAT测试、QualysGuard测试、和我们定制作的OpenSCAP测试。然后根据测试的发现的弱点调整安装包和配置,更新kickstart模版。

同时,对于政府的云服务,我们云安全团队通过Nessus Scanner / Nessus安全中心进行每月扫描,并将发现的弱点告诉我们,以便我们即时提供强化修复方案。这也是我们整个安全检查环节中的重要一环。

除了测试,我们每周会定期跟踪新的关键CVE,监测行业安全漏洞相关信息。

四、Agile Scrum 和 CI/CD流程

我们使用Agile Scrum 方式进行Linux Image项目管理, Scrum Sprint 周期为7天。

同时我们使用Jenkins进行整合测试, 使用Jenkins声明性管道的Jenkins文件来简化测试配置,并使用“来自SCM的管道脚本”,以确保所有测试的变更在Git Repo里可跟踪。

五、Linux操作系统安全评估和强化平台

我们还开发了一个Linux操作系统安全评估和强化平台,用于操作系统安全评估和强化修复。这是一个用于自助服务的应用程序,系统运维部门能够通过对CVE,报告和建议的自动评估来进行Oracle Linux OS安全评估。此外,它还支持STIG的操作系统强化和其他合规性修复任务。无论是否进行自定义,用户都可以运行自动修补和强化修复。同时,它允许轻松地将各种安全扫描工具(OpenScap,NESSUS,CIS-CAT,Pen-test,Yum Security-plugin, DISA STIG等)与其他企业分析或报告系统集成(例如OS Security Web Service,EM,PEO APS Auto-Remediation工具链,aps-cli或PEO Jobcontrol健康检查报告)。

六、以零停机时间为目标的自动部署和升级方案

在涉及到Kernel的升级中,我使用的是ksplice技术来实现“零停机时间”的操作系统升级。

在2018年的Meltdown 和 Spectre 漏洞事件中,我们设计开发并实施了个内部编排解决方案。在很短的期限内,我们提供了45,000行源代码(不包括评论或空白行),实现了一个dom0 和 domU 全面自动升级的方案,这个方案以Oracle SaaS服务的POD为目标对象,进行在线升级和强化。大约超过 70 万 VM 实例以及相应物理设备使用了我们的这个内部编排方案进行操作系统升级。

Oracle OpenWorld 2018: Perform In-Place Upgrade for Large Scale Cloud Infrastructure

我们最终在Linux领域交付的产品,是一个内部的名字叫“APOL Image”的Oracle Linux和OVM dom0方案,以及相关用于操作系统安全评估、修复和强化的统一工具链。

本文旨在简单阐述一下作为一个IT系统架构师,我工作中是如何思考并持续改进生产环境中Linux操作系统安全性和可靠性的。其目的在于抛砖引玉,带动大家一起讨论Linux操作系统安全性及改进方案。其中有些观点不一定正确,欢迎批评指正。

欢迎大家发表留言,列出你的企业在Linux操作系统领域遭遇到的痛点问题。

(作者:王录华,Oracle云服务研发总监)

参考资料:

(1)、Oracle OpenWorld 2018: Perform In-Place Upgrade for Large Scale Cloud Infrastructure

(2)、Oracle ksplice: https://www.oracle.com/webfolder/assets/infographics/ksplice/index.htm

(3)、Xen: http://xenbits.xen.org/xsa/

(4)、Oracle:http://linux.oracle.com/pls/apex/f?p=130:21

(5)、https://blogs.oracle.com/security/

(6)、http://www.oracle.com/technetwork/topics/security/whatsnew/index.html

(7)、https://nvd.nist.gov/vuln/search

(8)、CVE details http://www.cvedetails.com/

(9)、Redhat:https://access.redhat.com/security/cve/

(10)、https://rhn.redhat.com/errata/rhel-server-6-errata.html

(11)、https://rhn.redhat.com/errata/rhel-server-errata.html

(12)、https://securityblog.redhat.com/

(13)、 MS-ISAC Cyber Security Advisories - http://msisac.cisecurity.org/advisories/

(14)、 IBM's Alert - http://www.iss.net/threats/ThreatList.php

本文分享自微信公众号 - 云服务与SRE架构师社区(ai-cloud-ops),作者:王录华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 国产分布式数据库架构初印象

    与Oracle在华大规模裁员相比,国产数据库好消息连连,2019年可以说是国产数据库年。举几个例子,华为推出GaussDB,并成功上线招商银行/工商银行核心系统...

    王录华
  • ​CS:APP Attack Lab: 缓冲区溢出攻击

    CMU的15-213课程Introduction to Computer Systems (ICS)里面有一个实验叫attack lab,利用缓冲区溢出漏洞改变...

    王录华
  • 谈云计算数据中心DevSecOps运维模式中的安全性(第4篇)

    DevOps T-shirt worn at a computer conference (图片来源于Wikipedia, 由Raysonho上传)

    王录华
  • 王录华:我是如何为公有云和XX联邦政府提供安全的Linux操作系统的解决方案的?

    我大约是在2012年左右时,在网络和私有云两大领域之外,又在操作系统领域得到一个非常有挑战的新机遇:为公司超过30万台的服务器提供安全的Linux操作系统解决方...

    Linux阅码场
  • 盘点 Oracle 11g 中新特性带来的10大性能影响(上)

    Oracle的任何一个新版本,总是会带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先引起的是一些麻烦,因为对于新技术的不了解、因为对于旧环境的不适应...

    数据和云
  • 优化Profiler中Others的耗时……

    我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 内存 Q:我的...

    企鹅号小编
  • 利用协方差,Pearson相关系数和Spearman相关系数确定变量间的关系

    数据集中的变量之间可能存在复杂且未知的关系。重要的是发现和量化数据集的变量相关的程度。这些知识可以帮你更好地准备数据,以满足机器学习算法的预期,例如线性回归,其...

    AiTechYun
  • Spring Boot 入门

    Spring Boot 是由 Pivotal 团队提供的基于 Spring 的全新框架,其设计目的是为了简化 Spring 应用的搭建和开发过程。该框架遵循“约...

    三哥
  • 帝国的黄昏(1):楔子

    2019年5月7日,北京著名的“外企养老院”甲骨文公司中国研发中心迎来了历史上最血腥的一次裁员。第一批优化裁员发生在5月22日,约有900人被裁。后续的优化可能...

    数据猿
  • netty源码解析 ServerBootstrap.bind(port)

    在ServerBootstrap内,从bind方法一路跟进到private ChannelFuture doBind(final SocketAddress l...

    平凡的学生族

扫码关注云+社区

领取腾讯云代金券