crm 外壳 (crmsh) 或 Hawk 等群集管理工具可由 root 用户或 haclient 组内的任何用户使用。默认情况下,这些用户具有完全读/写访问权。要限制访问权或指派更加细化的访问权限,可以使用访问控制列表 (ACL)。
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。
开始对群集使用 ACL 之前,确保满足了以下条件:
请使用 NIS、Active Directory 或者通过手动方式将相同用户添加到所有节点,来确保群集中所有节点上的用户一致。
您要使用 ACL 修改其访问权限的所有用户都必须属于 haclient 组。
所有用户都需要使用 crmsh 的绝对路径 /usr/sbin/crm 运行 crmsh。
如果非特权用户想要运行 crmsh,则需要使用 /usr/sbin 扩展其 PATH 变量。
ACL 是可选功能。默认情况下,ACL 处于禁用状态。
如果未启用 ACL,则 root 用户以及属于 haclient 组的所有用户都将拥有对群集配置的完全读/写访问权。
即使启用并配置了 ACL,root 和默认 CRM 拥有者 hacluster 也始终对群集配置拥有完全访问权。
要使用 ACL,需要具备一些关于 XPath 的知识。XPath 是在 XML 文档中选择节点所用的语言。请参见 http://en.wikipedia.org/wiki/XPath 或查找位于 http://www.w3.org/TR/xpath/ 的规范。
在开始配置 ACL 之前,需要先启用 ACL。要执行此操作,请在 crmsh 中使用以下命令:
root #crmconfigure property enable-acl=true
也可以根据过程 9.1, “使用 Hawk 启用 ACL”中所述使用 Hawk。
按第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。
在左侧导航栏中,选择。
在 组中,从空下拉框中选择 属性,然后单击加号图标添加该属性。
要设置 enable-acl=true,请激活 enable-acl 旁边的复选框,并确认您所做的更改。
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。ACL 角色是用于描述对 CIB 访问权限的一组规则。规则包括以下组成部分:
访问权限,例如读、写或拒绝
规则应用位置的规范。此规范可以是标记、ID 参考、标记 + ID 参考或 XPath 表达式。
通常,方便的做法是在角色中捆绑 ACL 并将特定角色指派给用户。也可以直接为单个用户配置 ACL。
创建 ACL 规则的方法有两种:
第 9.3.1 节 “通过 XPath 表达式设置 ACL 规则”。需要知道基础 XML 的结构才能创建 ACL 规则。
第 9.3.2 节 “通过标记缩写设置 ACL 规则”。创建速记语法和 ACL 规则以应用到匹配的对象。
要通过 XPath 管理 ACL 规则,需要知道基础 XML 的结构。可使用以下命令来检索结构(该命令将显示 XML 格式的群集配置,请参见例 9.1 “XML 格式群集配置摘录”):
root #crmconfigure show xml
<num_updates="59"
dc-uuid="175704363"
crm_feature_set="3.0.9"
validate-with="pacemaker-2.0"
epoch="96"
admin_epoch="0"
cib-last-written="Fri Aug 8 13:47:28 2014"
have-quorum="1">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair name="stonith-enabled" value="true" id="cib-bootstrap-options-stonith-enabled"/>
<nvpair name="no-quorum-policy" value="ignore" id="cib-bootstrap-options-no-quorum-policy"/>
[...]
</cluster_property_set>
</crm_config>
<nodes>
<node id="175704363" uname="alice"/>
<node id="175704619" uname="bob"/>
</nodes>
<resources> [...] </resources>
<constraints/>
<rsc_defaults> [...] </rsc_defaults>
<op_defaults> [...] </op_defaults>
<configuration>
</cib> 使用 XPath 语言,您可在此 XML 文档中查找节点。例如,要选择 root 节点 (cib),则使用 XPath 表达式 /cib。要查找全局群集配置,则使用 XPath 表达式 /cib/configuration/crm_config。
例如,表 9.1 “Operator 角色 - 访问类型和 XPath 表达式”显示了用于创建“操作员”角色的参数(访问类型和 XPath 表达式)。具有此角色的用户只能执行第二列中所述的任务 - 他们既不能重新配置任何资源(例如,更改参数或操作),也不能更改共置约束或顺序约束的配置。
|
类型 |
XPath/说明 |
|---|---|
|
写 |
//crm_config//nvpair[@name='maintenance-mode'] 打开或关闭维护模式。 |
|
写 |
//op_defaults//nvpair[@name='record-pending'] 选择是否记录待发操作。 |
|
写 |
//nodes/node//nvpair[@name='standby'] 将节点设置为联机或备用模式。 |
|
写 |
//resources//nvpair[@name='target-role'] 启动、停止任何资源或使资源升级或降级。 |
|
写 |
//resources//nvpair[@name='is-managed'] 选择是否应管理资源。 |
|
写 |
//constraints/rsc_location 将资源从一个节点迁移/移动到另一个节点。 |
|
读 |
/cib 查看群集的状态。 |
对于不想使用 XML 结构的用户,有一种更简单的方法。即标记指示符和/或参考的组合。
例如,请考虑以下 XPath:
/cib/resources/primitive[@id='rsc1']
primitive 是带有 rsc1 参考的资源。缩写语法为:
tag: "primitive" ref:"rsc1"
这同样适用于约束。这是详细的 XPath:
/cib/constraint/rsc_location
缩写语法与以下内容类似:
tag: "rsc_location"
可以在 crmsh 和 Hawk 中使用缩写语法。CIB 守护程序知道如何将 ACL 规则应用到匹配的对象。
以下过程说明如何通过定义 monitor 角色并将其指派给用户,来配置对群集配置的只读访问权。您也可以根据过程 9.3, “使用 crmsh 添加 Monitor 角色并指派用户”中所述使用 crmsh 来实现此目的。
按第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。
在左侧导航栏中,选择。视图将显示已定义的和。
定义 ACL 角色:
选择类别,然后单击加号图标。
输入唯一的,例如 monitor。
本示例是要定义一个 monitor 角色,因此请从下拉框中选择读。
在 文本框中,输入 Xpath 表达式 /cib 并单击。
这将会创建名为 monitor 的新角色,为其设置读权限并通过使用 XPath 表达式 /cib 将其应用到 CIB 中的所有元素。
如果需要,可以通过单击加号图标并指定相应的参数,来添加更多的访问权限和 XPath 自变量。确认更改。
将角色指派给用户:
选择类别,然后单击加号图标。
视图中会显示可用的角色。此外,该视图中还包含一个附加行用于配置该用户的个别 ACL 规则。在该视图中,您可以向用户指派一个或多个角色,或者为该用户定义一个或多个不同的规则。选择某个角色后各规则对应的行将会消失;取消选择后,该行将会显示。无法同时指派角色和定义各个规则。
输入唯一的,例如 tux。确保此用户属于 haclient 组。
要将角色指派给用户,请从中选择相应的条目。对于本示例,请选择您创建的 monitor 角色。
要取消选择一个或多个角色,请再次单击相应的条目。如果未选择任何角色,用于定义各规则的行会再次显示。
如果想要定义单个规则,请选择并为该规则输入相应的 Xpath 参数。单击加号图标可定义更多规则。
确认您的选择,然后单击将角色或规则指派给用户。
要配置资源或约束的访问权限,还可使用第 9.3.2 节 “通过标记缩写设置 ACL 规则”中所述的缩写语法。例如,如果拥有 ID 为 rsc1 的基元资源,请为和输入以下值:primitive 和 rsc1。只输入 rsc1 作为的好处在于,它可以同时匹配基元资源与本地资源管理器资源 (LRM)。这样,您便可以在配置 rsc1 的同时清理其状态。
以下过程说明如何通过定义 monitor 角色并将其指派给用户,来配置对群集配置的只读访问权。
以 root 身份登录。
启动 crmsh 的交互模式:
root #crmconfigurecrm(live)configure#
定义 ACL 角色:
使用 role 命令定义新角色:
crm(live)configure#rolemonitor read xpath:"/cib"
上面的命令会创建名为 monitor 的新角色,为其设置读权限并通过使用 XPath 表达式 /cib 将其应用到 CIB 中的所有元素。如有必要,可添加更多访问权限和 XPath 自变量。
根据需要添加其他角色。
将角色指派给一个或多个用户。确保这些用户属于 haclient 组。
crm(live)configure#acl_targettux monitor
检查更改:
crm(live)configure#show
提交更改:
crm(live)configure#commit
要配置资源或约束的访问权限,还可使用第 9.3.2 节 “通过标记缩写设置 ACL 规则”中所述的缩写语法。如果有 ID 为 rsc1 的原始资源,则使用以下表示法设置访问权限:write tag:"primitive" ref:"rsc1"。还可使用 write ref:"rsc1" 参考该 ID。这种做法的好处在于,可以同时匹配基元资源与本地资源管理器资源 (LRM)。这样,您便可以在配置 rsc1 的同时清理其状态。