服务器群集Windows和WindowsServer安全性最佳实践.docx
《服务器群集Windows和WindowsServer安全性最佳实践.docx》由会员分享,可在线阅读,更多相关《服务器群集Windows和WindowsServer安全性最佳实践.docx(30页珍藏版)》请在冰豆网上搜索。
![服务器群集Windows和WindowsServer安全性最佳实践.docx](https://file1.bdocx.com/fileroot1/2023-1/10/bfe1207d-d83a-4fbf-933f-b044b4ce6576/bfe1207d-d83a-4fbf-933f-b044b4ce65761.gif)
服务器群集Windows和WindowsServer安全性最佳实践
服务器群集:
Windows2000和WindowsServer2003安全性最佳实践
发布日期:
2004年08月16日
本页内容
一般性假设
部署和操作管理
一般性假设
应该为基础结构设置一些一般性假设和可行的最佳操作,以确保服务器群集运行环境的安全。
1.
服务器和存储器应处于真正安全的地方。
2.
设置检测不规则流量的实用安全实施,例如防火墙、网络探测器和管理工具。
3.
在诸如管理、日志存储、备份和恢复这样的领域,遵循安全方面的最佳实践/常识。
4.
在分配管理权限、ACL资源和其他内务处理角色方面,坚持平台级安全性最佳实践。
5.
ActiveDirectory、DNS、DHCP、WINS等网络基础结构服务必须是安全的。
任何危及这些基础结构服务安全的做法均会导致危及群集服务自身的安全。
6.
群集管理员必须确保在受信任的计算机上运行调用群集API(ClusAPI)的应用程序。
对正在执行这些应用程序(由群集管理员运行)的计算机的任何妥协方案均会危及群集的安全。
例如,如果在运行管理工具的工作站上存在具有提升权限的不受信任的用户,群集管理员可能会在本人毫无察觉的情况下对群集运行不可信赖代码或恶意代码。
7.
对于由群集服务创建和维护的对象集,切勿将这些对象的默认设置调整为限制较少的设置,以免危及其访问安全。
群集服务可利用操作系统中的一系列对象,例如:
文件、设备、注册表项等。
这些对象都具有默认安全设置,可确保非特权用户无法影响群集配置或群集上运行的应用程序。
将这些安全设置改为限制较少的安全设置可能导致危及群集的安全并损坏应用程序数据。
返回页首
部署和操作管理
群集管理员
管理员可以指定组或个人,允许他们对群集进行管理。
在服务器群集的当前版本中,控制的精度并不高;用户要么具有管理群集的权限,要么不具有这些权限。
要授予用户或组管理群集的权限,必须将该用户或组添加到群集安全描述符中。
此操作可以由群集管理员执行,或通过cluster.exe命令行工具来完成。
请注意:
除节点上的本地管理员组外,群集安全配置的所有其他成员还必须是域用户帐户或全局组。
这是为了确保帐户在群集中的所有节点上都相同、已正确定义并已授权。
默认情况下,本地管理员组会被添加到群集服务安全描述符中。
将用户或组添加到群集安全描述符中意味着该用户可以对该群集配置进行全面管理,其中包括(但不限于):
•
使资源脱机和联机
•
关闭节点上的群集服务
•
向群集中添加节点或从群集中删除节点
•
向群集中添加资源或从群集中删除资源
由于群集中运行的应用程序和服务的影响范围,在向群集安全描述符中添加用户时必须特别注意。
群集服务可运行与群集服务域用户帐户(不要将该帐户与用于管理该群集的帐户相混淆)下的资源相关联的代码。
由于群集管理员可以向群集添加新的资源,而且这些资源作为群集服务帐户运行,因此群集管理员可以安装那些将用计算机上的本地管理员权限运行的代码。
最佳实践
•
群集管理员应使用群集服务帐户以外的其他帐户来管理群集。
这会将不同的策略(如:
密码过期等)分别应用于群集服务帐户和用于管理群集的域帐户。
•
您应该只将具有本地管理员权限的用户添加到群集服务安全描述符中。
请注意:
将域用户或全局组添加到本地管理员组,则该组或帐户将自动成为群集管理员。
•
不要将本地管理员组从群集服务安全性配置中删除。
远程管理和配置群集
调用服务器群集API(ClusAPI)的管理工具或其他应用程序可在远程工作站上运行。
一般假设群集管理员必须确保在受信任的计算机上运行这些应用程序。
对正在执行这些应用程序(由群集管理员运行)的计算机的任何妥协方案均会危及群集的安全。
当创建群集或者更改配置(例如添加新的群集节点)时,“群集配置向导”将在运行该向导的计算机上创建一个日志文件,以便在出现故障时,管理员可以使用日志进行调试和故障诊断。
日志文件可包含群集配置数据,例如群集IP地址、网络名称等。
如果XX的用户读取了数据,则此数据就可能被用来扩大攻击面。
群集服务帐户
群集服务帐户是用来启动群集服务的帐户。
该帐户的凭据存储于服务控制管理器(SCM)中,服务控制管理器(SCM)是一个Windows组件,负责在群集节点引导时启动群集服务。
群集服务帐户在群集中的所有节点上都必须相同,而且必须属于域级帐户,对群集中的每个节点都具有本地管理权限。
必须存在域帐户才能创建群集,“群集配置向导”将提示您输入所要使用的现有帐户。
如果该帐户尚不是本地管理员组的成员,在创建群集时“群集配置向导”会自动将该帐户添加到本地管理员组中。
同样,将节点添加到群集时,群集服务帐户也将被添加到本地管理员组中。
如果节点从群集中脱离或最后一个节点被删除,并不会从本地管理员组中删除群集服务帐户。
您需要知道这些语义,以免不小心将域帐户本地管理员权限授予一组假设的节点。
请注意:
从群集中脱离节点时不会将群集服务帐户从本地管理员组中删除。
将节点从群集中删除后,应当手动将群集服务帐户从本地管理员组中删除,以免接纳对计算机具有本地管理员权限的过期帐户。
服务器群集中的节点可使用经过身份验证的通信机制,以确保在群集内的协议中只有该群集的有效成员可以参与。
群集中每个节点都具有相同的群集服务帐户,这一点非常重要,因为这样才能提供身份验证的一致性。
这也是MicrosoftWindowsServer2003中引入的群集服务帐户密码实用程序的要求。
必备权限
除了作为本地管理员组的成员外,群集服务帐户还需要一组本地授权的附加权限:
•
充当操作系统的一部分(Windows2000和更高版本中需要)。
•
备份文件和目录。
•
增加配额。
•
提高调度优先级。
•
加载和卸载设备驱动程序。
•
将页锁定在内存中。
•
以服务登录。
•
还原文件和目录。
不能从群集服务帐户中删除任何这些权限。
如果删除这些必需权限中的任何权限,群集服务可能无法启动或正确操作。
在设置群集服务器过程中,这些权限会在本地授予帐户。
无论何时需要手动重新创建群集服务帐户,都必须授予这些附加权限。
知识库文章269229:
如何手动重新创建群集服务帐户描述了重新创建群集服务帐户所需的步骤。
密码策略
群集服务帐户与任何其他域帐户都类似,同样具有密码,而且密码也可以与密码过期策略相关联。
如果已为密码分配了过期策略,则在群集帐户密码过期前必须更改该密码。
否则,当密码过期时将造成群集停止工作(因为无法再顺利地对群集内的通信进行身份验证)。
更改密码
在大多数产品部署中,域帐户都具有密码过期策略,强制相对频繁地更改密码(如:
每30天更改一次)。
更改群集帐户密码需要仔细规划。
Windows2000
群集中所有节点上的群集服务帐户都必须匹配,以确保可以成功地对群集内的通信进行身份验证。
在各种条件下群集服务本身会在群集节点之间发送消息,如果有任何一项通信失败,群集节点将从群集中删除(即群集服务将被停止)。
由于无法确定群集服务何时建立通信,因此没有明确的窗口可用来以可靠的方式更改群集服务帐户,同时确保群集仍然运行。
在Windows2000中,只能使用以下步骤可靠地更改群集帐户密码:
1.
停止群集中所有节点上的群集服务
2.
更改域控制器中的群集服务帐户的密码
3.
更新所有群集节点上的服务控制管理器密码
4.
重新启动所有群集节点上的群集服务
WindowsServer2003
WindowsServer2003中的cluster.exe命令能够动态更改群集帐户密码,而无需关闭任何节点上的群集服务。
cluster.exe命令可更改域帐户密码并更新群集中所有节点上的服务控制管理器帐户信息。
请注意:
此命令仅适用于WindowsServer2003节点。
如果群集中有任何Windows2000节点,则这些节点的群集服务帐户密码将不被更改。
Cluster/cluster:
cluster_name1[,cluster_name2,]/changepassword[:
new_password[,old_password]][/skipdc][/force][/options]
这些命令参数具有下列含义:
参数
描述
cluster:
cluster_name1[,cluster_name2,]
标识要对其更改帐户密码的群集。
如果指定了多个群集,则这些群集必须使用相同的群集服务帐户。
如果某些节点不可用,在所有节点或域控制器上的密码都不会被更改。
/changepassword[:
new_password[,old_password]]
将域控制器和所有群集节点上的群集服务帐户密码由old_password(旧密码)更改为new_password(新密码)。
如果命令行中没有提供密码,将会提示您提供密码。
/skipdc
只更改群集节点上的群集服务帐户密码。
/force
强制更改可用节点上的密码,即使某些节点不可用。
请注意:
不可用节点上的密码将不被更新。
在使用计算机管理手动更新这些节点上的群集服务帐户密码之前,这些节点将无法加入群集。
“群集管理器”工具的联机帮助文档中介绍了该命令的详细信息。
最佳实践
•
群集服务帐户不能是域管理员帐户。
•
应该授予所有帐户尽可能少的权限和特权,以免给定帐户泄漏时出现潜在的安全问题。
•
使用委派为群集中所有节点上的特定帐户授予管理权限。
•
如果单个域中有多个群集,在所有节点上使用同一群集服务帐户可简化管理工作。
•
对多个群集使用单个帐户既可以简化管理,同时又带来潜在的安全风险,您需要在这二者之间做出权衡。
如果帐户泄漏,受影响的范围取决于涉及到多少个群集。
•
使用WindowsServer2003,可以同时更改多个群集中的群集服务帐户密码。
•
如果已经在群集服务帐户上设置了密码过期策略,则不应对其他服务使用此帐户。
•
例如,如果已经设置了密码过期策略,不要对SQLServer2000或Exchange2000使用群集服务帐户。
如果有多个服务使用同一个帐户,在群集服务和其他服务之间协调密码更改将会非常复杂,并导致密码轮换期间整个群集和/或服务不可用。
最好对每项服务使用一个专用帐户,以便可以独立维护各个帐户。
•
使用WindowsServer2003,可以联机更改群集服务帐户密码,而不必仅当没有服务使用同一服务帐户时关闭群集。
•
更改Windows2000上的群集服务帐户需要完全关闭群集,然后才能更改帐户密码。
关闭并重新启动群集可能意味着群集无法满足可用性要求。
例如,对应用程序和服务来说,99.999%的运行时间要求每年的停机时间少于五分钟。
如果群集由于密码循环而关闭,则无法达到此可用性级别。
使用Windows2000时,在这些高可用性环境中,群集服务帐户的密码过期策略应设为永不过期。
•
通过Windows2000SP3和WindowsServer2003,群集服务可以发布虚拟服务器作为ActiveDirectory中的计算机对象。
如要确保操作正确,群集服务帐户应有适当的访问权限或特权以便能够创建和操作ActiveDirectory计算机容器中的这些对象。
请参见“在服务器群集中使用Kerberos身份验证”一节。
•
如果打算使用不同的群集服务帐户部署多个群集,则应创建一个实施上述所有策略并具有上述所有特权的全局组或通用组。
然后,应该将每个群集服务帐户放入该组中。
•
通过为所有群集服务帐户提供一个容器并提供一个管理位置来更改帐户策略,从而简化了群集服务帐户的管理。
在服务器群集中使用Kerberos身份验证
Windows2000中的Kerberos身份验证作为Windows平台的一部分予以发布。
其是Windows平台能够向前发展的主要(和默认)安全机制,并且与以前的身份验证机制(例如:
NTLM)相比,具有许多优点:
•
提供客户端和服务器之间的相互身份验证:
服务器确保客户端可以访问服务器上提供的服务或应用程序,而客户端可以确保正与之通信的服务器确实是其所需的那台服务器。
•
允许在多台计算机之间进行委派身份验证:
在多层应用程序部署中,允许与原始请求关联的基于凭据的端对端模拟。
例如,一个Web站点中可能包含一个IISWeb服务器前端、在中间层的业务对象和一个后端的数据库。
Kerberos允许在所有Web服务器到数据库的所有层之间执行原始客户身份验证,以实现端到端的身份验证和授权。
•
这是一种允许在多个平台之间实现通用身份验证机制的工业标准。
有关Kerberos及其工作原理的更多信息,请访问TechNet网站:
在服务器群集中,应用程序部署在虚拟服务器中。
虚拟服务器是一个服务器群集资源组,包含IP地址资源和网络名称资源以及给定的服务或应用程序所需的任何资源。
客户端使用与服务关联的IP地址或网络名称连接到群集服务。
当应用程序从一个节点故障转移到另一个节点时,IP地址和网络名称资源也会相应地转移过去,因此,不论客户端当前是由群集中的哪台计算机承载的,客户端都将继续使用服务或应用程序原来的目标位置。
对于Windows2000(SP2及早期版本)中的服务器群集,可用于根据虚拟服务器名称对客户端进行身份验证的唯一机制是NTLM,因此Kerberos提供的优点对于包含服务器群集的部署不可用。
在Windows2000SP3和WindowsServer2003中,Kerberos身份验证将可用于群集服务器应用程序,允许在高度可用的部署中实现端对端模拟。
虚拟服务器计算机对象
Kerberos身份验证需要在ActiveDirectory中发布一个后备计算机对象(CO)。
在Windows2000SP3和更高版本中,网络名称群集资源可以在ActiveDirectory中为虚拟服务器发布计算机对象。
这可通过新资源属性RequireKerberos的下列值进行控制:
•
RequireKerberos=0
网络名称资源不在ActiveDirectory中创建对象。
这提供了与Windows2000(SP2以下)相同的语义,并且是默认值,可确保实现向后兼容以及滚动升级过程中的正确操作1:
•
RequireKerberos=1
网络名称资源在ActiveDirectory中创建对象,从而能够根据虚拟服务器计算机名称进行Kerberos身份验证。
本节的稍后部分将介绍此属性的完整语义。
请注意:
虽然网络名称资源在ActiveDirectory中发布计算机对象,但是不应该将此计算机对象用于管理任务,如:
应用组策略。
Windows2000和WindowsServer2003中虚拟服务器计算机对象的唯一作用就是使识别群集和ActiveDirectory的服务(例如MSMQ)能够使用Kerberos身份验证和委派,以发布服务提供程序信息
计算机对象的寿命
网络名称资源根据某些因素(包括资源属性设置和资源自身的寿命)控制计算机对象的创建和删除。
创建计算机对象
当RequireKerberos资源属性设置为1(默认值为0)时,网络名称资源将创建计算机对象。
将此值设置为1要求群集服务帐户必须能够访问ActiveDirectory,这可以通过具有将工作站添加到域的特权或授予访问ActiveDirectory的特定权限来实现。
如果帐户没有访问权限,则网络名称资源将无法实现联机。
域管理员可以预先为虚拟服务器(在独立的组织单位中,如果需要)创建计算机对象,以免将工作站添加到域特权授予群集帐户。
在这种情况下,计算机对象必须有一个访问控制限制(ACL),以允许群集服务帐户重新设置密码并写入DnsHostName和ServicePrincipalName属性(它们具有单独的访问权限)。
如果与虚拟计算机名称对应的ActiveDirectory中存在孤立计算机对象或由域管理员创建的计算机对象,同时群集服务帐户具有该对象的访问权限,而且该对象未被禁用,则网络名称资源将截获该现有计算机对象。
如果向域中添加新计算机,而该域包含具有相同名称的尚未使用的旧的计算机对象,则会出现同样的问题。
网络名称资源将计算机对象的DnsHostName属性设置为网络名称资源Name属性的完全合格的DNS名称加上节点的主DNS后缀2:
禁用计算机对象
当不再需要Kerberos身份验证(RequireKerberos属性由1变为0)或者当资源本身被删除时,计算机对象将被禁用。
如果计算机对象仍然存在,但是网络名称资源在没有启用Kerberos身份验证的情况下进行联机,则客户端身份验证将失败。
当从网络名称资源中删除Kerberos身份验证时,系统管理员必须删除相应的计算机对象。
注意,虚拟服务器中驻留的识别ActiveDirectory的应用程序(例如:
ExchangeServer和MSMQ)可能已将自己的信息附加到计算机对象中。
如果删除计算机对象,那些属性也将被删除,应用程序可能无法再正常运行。
从网络名称中删除Kerberos身份验证时要十分小心。
当删除网络名称资源或Kerberos身份验证时,网络名称资源会尽量一次性禁用计算机对象。
所有禁用操作及其最后的状态都将记录到群集和系统事件日志中。
如果由于任何原因禁用计算机对象失败,将不再尝试禁用。
重命名计算机对象
计算机对象与网络名称资源公开的虚拟网络名称联系密切。
如果更改网络名称资源的Name属性,这种更改一定会在计算机对象中反映出来。
这些变化紧密搭配并实现了同步,因此,仅当网络名称资源脱机时才能更改Name属性。
如果由于任何原因重命名计算机对象失败,对Name属性的更改也将失败。
此处有一点需要注意:
当网络名称资源联机时允许更改其属性值;在这种情况下,重命名操作将被推迟,直到名称脱机。
如果重命名尝试失败,作为联机过程的一部分将重试此操作。
名称不会联机,直到重命名操作成功。
请注意:
诸如MSMQ和SQLServer等许多应用程序和服务都不支持更改网络名称资源的Name属性。
密码轮换
当颁发Kerberos权证时计算机对象维护用于身份验证的密码。
在最新的Windows2000SP3和WindowsServer2003实施中,在计算机对象创建之后,其中的密码将不会更改。
警告、问题和注意事项
孤立计算机对象
许多操作系统服务和应用程序都使用Negotiate(协商)安全程序包,后者是Windows平台提供的一个组件,允许客户端通过某项服务进行身份验证。
此程序包隐藏任何给定身份验证方案的细节,并且允许客户端尝试Kerberos身份验证,如果Kerberos身份验证不可用,则恢复到NTLM身份验证。
如果ActiveDirectory中有一个计算机对象与客户端正在使用的目标名称相对应,则协商程序包将假定Kerberos身份验证是必须的。
3:
如果ActiveDirectory中存在虚拟计算机对象(已禁用或未禁用),则将来与该虚拟服务器名称的客户端连接不会恢复到NTLM。
如果对虚拟服务器的身份验证失败,并且该虚拟服务器使用的应该是NTLM,那么应检查与该虚拟服务器名称对应的ActiveDirectory中是否有孤立或旧的计算机对象。
识别群集和识别ActiveDirectory的服务
有些服务既识别群集又识别ActiveDirectory,例如:
SQLServer2000、Exchange2000和MSMQ。
其中有些服务会将服务信息附加到计算机对象。
例如,MSMQ会将服务信息附加到虚拟服务器计算机对象。
从网络名称资源中删除Kerberos身份验证时,计算机对象将被禁用,系统管理员必须明确决定是否删除计算机对象。
如果计算机对象被删除,由识别ActiveDirectory的应用程序附加的属性也将被删除,从而导致应用程序可能无法再正常运行。
从网络名称资源中删除Kerberos身份验证时要格外小心。
ActiveDirectory复制延迟
到目前为止,我们都将ActiveDirectory作为一个高度一致的基础结构进行讨论。
在生产环境中,可部署多个域控制器以确保域基础结构高度可用。
对ActiveDirectory的更改会在多个节点之间进行复制,有些情况下复制延迟时间可能很长。
这可能导致出现一些看上去不一致的情况,这点您需要注意:
•
客户端无法看到网络名称资源的计算机对象
不同的节点可能访问不同的域控制器。
如果在某个域控制器上创建计算机对象,客户端可能无法看到该对象,直到其被复制到其他域控制器。
最佳实践
•
在群集中使用Kerberos身份验证时,请仔细规划:
•
在那些对您的部署有意义的虚拟服务器上启用Kerberos身份验证。
•
除非您完全了解使用虚拟服务器的服务以及虚拟服务器对该服务的影响,否则不要禁用虚拟服务器上的Kerberos身份验证。
计算机对象和附加到其中的任何服务信息都将被删除(假设有正确的特权),这可能导致服务不可用或无法恢复。
•
群集服务帐户应具有将工作站添加到域特权,以允许该帐户在ActiveDirectory中创建计算机对象。
如果您不想将该特权授予群集服务帐户,必须在启用Kerberos身份验证之前在ActiveDirectory中手动创建计算机对象。
请注意:
将工作站添加到域特权允许从该帐户创建10个默认的计算机对象。
另外,将工作站添加到域本身不允许删除该帐户或重命名计算机对象。
•
群集服务帐户应该具有写入所有属性访问权限,以允许该帐户重命名计算机对象。
•
许多服务(包括MSMQ和SQLServer2000)都不支持更改网络名称资源的Name属性。
仅当您完全理解更改此属性的含义时,才能更改此属性。
有些情况下,更改网络名称资源的Name属性可能导致数据丢失或服务失败。
•
在允许客户端访问新创建的与网络名称资源相关联的计算机对象之前,或将资源故障转移到群集中的其他节点之前,应该确保域控制器有机会复制这些计算机对象。
否则,可能导致无法预料的结果(请参见“ActiveDirectory复制延迟”一节)。
网络安全性
网络泛洪
群集服务使用UDP端口3343进行群集内部通信。
这种通信包括检测节点故障和群集控制操作的检测信号通信。
其中某些操作(例如,检测信号)对时间很敏感。
如果由于网络泛洪攻击,端口负担过重,可能导致检测到错误的节点故障,从而导致不必要的故障转移操作,这将导致应用程序无法运行。
端口抢占
不良应用程序可能劫持或“抢占”端口3343,从而使群集服务无法启动。
在这种情况下,唯一的选择就是终止使用此端口的进程。
端口3343仅针对群集服务