12 访问控制列表 #
crm 外壳 (crmsh) 或 Hawk2 等群集管理工具可由 root
用户或 haclient
组内的任何用户使用。默认情况下,这些用户具有完全读/写访问权。要限制访问权或指派更加细化的访问权限,可以使用访问控制列表 (ACL)。
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。
仅当您的 CIB 是使用 pacemaker-2.0
或更高 CIB 语法版本验证的情况下,此 ACL 文档才适用。有关如何查验这一点以及升级 CIB 版本的细节,请参见注意:升级 CIB 语法版本。
12.1 要求和先决条件 #
开始对群集使用 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/ 的规范。
12.2 在群集中启用 ACL #
在开始配置 ACL 之前,需要先启用 ACL。要执行此操作,请在 crmsh 中使用以下命令:
root #
crm
configure property enable-acl=true
或者,按过程 12.1 “使用 Hawk 启用 ACL”中所述使用 Hawk2。
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
显示全局群集选项及它们当前的值。在
下面,单击空下拉框并选择 以添加该参数。系统即会添加该参数,且将其设为默认值No
。将其值设置为
Yes
,然后应用更改。
12.3 ACL 的基本原理 #
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。ACL 角色是用于描述对 CIB 访问权限的一组规则。规则包括以下组成部分:
访问权限,例如
读
、写
或拒绝
规则应用位置的规范。此规范可以是类型、ID 参照或 XPath 表达式。
通常,方便的做法是在角色中捆绑 ACL 并将特定角色指派给系统用户(ACL 目标)。创建 ACL 规则的方法有两种:
第 12.3.1 节 “通过 XPath 表达式设置 ACL 规则”。需要知道基础 XML 的结构才能创建 ACL 规则。
第 12.3.2 节 “通过缩写设置 ACL 规则”。创建速记语法和 ACL 规则以应用到匹配的对象。
12.3.1 通过 XPath 表达式设置 ACL 规则 #
要通过 XPath 管理 ACL 规则,需要知道基础 XML 的结构。可使用以下命令来检索结构(该命令将显示 XML 格式的群集配置,请参见例 12.1):
root #
crm
configure 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"/> [...] </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
。
例如,表 12.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='maintenance'] 选择是否应将资源置于维护模式。 |
写 |
//constraints/rsc_location 将资源从一个节点迁移/移动到另一个节点。 |
读 |
/cib 查看群集的状态。 |
12.3.2 通过缩写设置 ACL 规则 #
对于不想使用 XML 结构的用户,有一种更简单的方法。
例如,请考虑以下 XPath:
//*[@id="rsc1"]
它会查找 ID 为 rsc1
的所有 XML 节点。
缩写语法与以下内容类似:
ref:"rsc1"
这同样适用于约束。这是详细的 XPath:
//constraints/rsc_location
缩写语法与以下内容类似:
type:"rsc_location"
可以在 crmsh 和 Hawk2 中使用缩写语法。CIB 守护程序知道如何将 ACL 规则应用到匹配的对象。
12.4 使用 Hawk 配置 ACL2 #
下面的过程说明如何通过定义 monitor
角色并将其指派给用户来配置对群集配置的只读访问权限。您也可以根据过程 12.4 “使用 crmsh 添加 Monitor 角色并指派用户”中所述使用 crmsh 来实现此目的。
要配置资源或约束的访问权限,还可使用第 12.3.2 节 “通过缩写设置 ACL 规则”中所述的缩写语法。
12.5 使用 crmsh 配置 ACL #
以下过程说明如何通过定义 monitor
角色并将其指派给用户,来配置对群集配置的只读访问权。
以
root
身份登录。启动 crmsh 的交互模式:
root #
crm
configurecrm(live)configure#
定义 ACL 角色:
使用
role
命令定义新角色:crm(live)configure#
role
monitor read xpath:"/cib"上面的命令会创建名为
monitor
的新角色,为其设置读
权限并通过使用 XPath 表达式/cib
将其应用到 CIB 中的所有元素。如有必要,可添加更多访问权限和 XPath 自变量。根据需要添加其他角色。
将角色指派给一个或多个 ACL 目标,即相应的系统用户。确保这些目标属于
haclient
组。crm(live)configure#
acl_target
tux monitor检查更改:
crm(live)configure#
show
提交更改:
crm(live)configure#
commit
要配置资源或约束的访问权限,还可使用第 12.3.2 节 “通过缩写设置 ACL 规则”中所述的缩写语法。