我们已经探讨了SOE对企业如此重要的原因,并且从较高的层次上理解了解决这些问题的方法,现在让我们来详细了解一下SOE。从定义SOE本身开始。
让我们从一个更实际的角度来快速看一下。我们已经说过,SOE是一个概念,而不是绝对的。在最简单的层次上,它是一个通用的服务器映像或构建标准,部署在整个公司的大量服务器上。在这里,所有必需的任务都是以已知的、文档化的方式完成的。
首先是基本操作系统,正如我们所讨论的,有数百种Linux发行版可供选择。从系统管理的角度来看,有些非常相似(例如,Debian和Ubuntu),而有些则明显不同(例如,Fedora和Manjaro)。举个简单的例子,假设你想在Ubuntu 18.04 LTS上安装Apache Web服务器,可以输入以下命令:
现在,如果你想在CentOS 7上执行相同的操作,可以输入以下命令:
如你所见,这些命令之间没有任何共同之处,甚至连软件包的名称都不同,尽管这两种情况的最终结果都是安装了Apache。在小规模时,这不是一个问题,但是当服务器数量众多并且随着服务器数量的增加,管理这样一个环境的复杂性也会增加。
基本操作系统只是一个开始。上面的例子是安装Apache,也可以安装nginx甚至lighttpd。毕竟,它们也是Web服务器。
然后是配置。你希望用户能够通过SSH以root身份登录吗?出于审计或调试的目的,你需要一定级别的日志记录吗?你需要本机身份验证还是集中式身份验证?这份清单是无穷无尽的,如你所见,如果任其发展,可能会成为一个巨大的问题。
这就是SOE的用武之地。它实际上是一个规范,在较宏观的层次上,它可能会规定:
·标准基本操作系统是Ubuntu 18.04 LTS。
·标准Web服务器将是Apache 2.4。
·SSH登录已启用,但仅适用于具有SSH密钥的用户而不是root用户。
·所有用户登录都必须记录并存档,以便进行审核。
·除少数本机应急(break glass)账户外,所有账户都必须集中管理(例如,通过LDAP或Active Directory)。
·公司监控解决方案必须集成(例如,必须安装并配置Nagios NCPA代理,以便与Nagios服务器通信)。
·所有系统日志必须发送到公司中央日志管理系统。
·必须对系统应用安全加固。
以上只是一些例子,并不是完整的。但是,它应该开始让你了解SOE在宏观层次上的样子。本章我们将深入探讨这个问题,并给出更多的例子来建立一个明确的定义。
在继续之前,我们需要了解环境中要包含哪些内容。在上一节中,我们概述了一个非常简单的SOE定义。任何一个好的SOE操作过程的一部分就是拥有一个预定义的操作系统构建,它可以随时被部署。有多种方法可以实现这一点,我们将在本书后面讨论这些。但是,目前,让我们假设已经建立了Ubuntu 18.04 LTS的基本映像,正如前面所建议的那样。
我们在这个标准构建中集成了什么?例如,我们知道登录策略将应用于整个组织,因此,在创建构建时,/etc/ssh/sshd_config必须定制为包含PermitRootLogin no和PasswordAuthentication no。在部署后,再在配置中执行此步骤没有意义,因为这必须在每个部署上执行。很简单,这将是低效的。
对于操作系统映像,还有一些重要的自动化考虑因素。我们知道Ansible本身是通过SSH进行通信的,因此需要某种凭据(很可能是基于SSH密钥的),以便Ansible在所有部署的服务器上运行。在实际执行任何自动化操作之前,手动将Ansible凭据推送到每台计算机没有什么意义,因此重要的是考虑Ansible要使用的身份验证类型(例如,基于密码或SSH密钥的身份验证),并在构建映像时创建账户和相应的凭据。具体方法取决于你的公司安全标准,但我建议将以下内容作为一种潜在的解决方案:
·在标准映像上创建一个本机账户,以便Ansible进行身份验证。
·授予此账户适当的sudo权限,以确保可以执行所有所需的自动化任务。
·设置此账户的本机口令,或者将从Ansible密钥对中取出的SSH公钥添加到你创建的本机Ansible账户的authorized_keys文件中。
这样做当然会带来一些安全风险。Ansible很可能需要完全访问你服务器上的root,以便它有效地执行你可能要求它执行的所有自动化任务,因此如果凭据泄露,此Ansible账户可能会成为后门。建议尽可能少的人可以访问你的凭据,并建议你使用AWX或Ansible Tower(我们将在第3章中探讨)等工具来管理你的凭据,从而防止其他人不适当地获取凭据。你几乎肯定还希望启用对Ansible账户执行的所有活动的审计,并将这些活动记录到某个中央服务器上,以便你可以检查它们是否存在任何可疑活动,并根据需要对它们进行审计。
从用户账户和身份验证开始,还可以考虑 Nagios跨平台代理(NCPA) 。在我们的示例中,我们知道需要监视所有部署的服务器,因此必须安装NCPA代理,并定义令牌以便它可以与Nagios服务器通信。同样,部署标准映像之后再在每台服务器上执行此操作是没有意义的。
但是Web服务器呢?制定一个标准是明智的,因为这意味着所有对环境负责的人都能对这项技术感到满意。这使得管理更容易,并且对于自动化特别有利,我们将在下一节中看到。但是,除非你只需要部署运行在Linux上的Web服务器,否则这可能不应该作为标准构建的一部分。
作为一个合理的原则,标准构建应该尽可能简单和轻量级。当额外的服务都是多余的时,在服务器上面运行它们,占用内存和CPU周期是没有意义的。同样,拥有未配置的服务会增加潜在攻击者的攻击面,因此出于安全原因,建议将其排除在外。
简言之,标准构建应该只包含将对部署的每个服务器都通用的配置和服务。这种方法有时称为 刚刚够用操作系统(Just enough Operating System,JeOS) ,它是SOE的最佳起点。
在了解了SOE的基本原理之后,我们将在下一节中更详细地了解SOE给企业带来的好处。