15 访问控制列表 #
crm 外壳 (crmsh) 或 Hawk2 等群集管理工具可由 root
用户或 haclient
组内的任何用户使用。默认情况下,这些用户具有完全读/写访问权。要限制访问权或指派更加细化的访问权限,可以使用访问控制列表 (ACL)。
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。
仅当您的 CIB 是使用 pacemaker-2.0
或更高 CIB 语法版本验证的情况下,此 ACL 文档才适用。有关如何查验这一点以及升级 CIB 版本的细节,请参见注意:升级 CIB 语法版本。
15.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
也始终对群集配置拥有完全访问权限。
15.2 概念概述 #
访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。ACL 角色是用于描述对 CIB 访问权限的一组规则。规则包括以下组成部分:
诸如
read
、write
或deny
的访问权限规则应用位置的规范。此规范可以是类型、ID 参照或 XPath 表达式。XPath 是在 XML 文档中选择节点所用的语言。有关详细信息,请参见 https://en.wikipedia.org/wiki/XPath。
通常,方便的做法是在角色中捆绑 ACL 并将特定角色指派给系统用户(ACL 目标)。创建 ACL 角色的方法有以下几种:
第 15.7 节 “通过 XPath 表达式设置 ACL 规则” 下)的文件。需要知道基础 XML 的结构才能创建 ACL 规则。
第 15.8 节 “通过缩写设置 ACL 规则” 下)的文件。创建速记语法和 ACL 规则以应用到匹配的对象。
15.3 在群集中启用 ACL #
在开始配置 ACL 之前,需要先启用 ACL。要执行此操作,请在 crmsh 中使用以下命令:
#
crm configure property enable-acl=true
或者,按过程 15.1 “使用 Hawk 启用 ACL”中所述使用 Hawk2。
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
显示全局群集选项及它们当前的值。在
下面,单击空下拉框并选择 以添加该参数。系统即会添加该参数,且将其设为默认值No
。将其值设置为
Yes
,然后应用更改。
15.4 创建只读 monitor 角色 #
以下小节介绍如何使用 Hawk2 或 crm 外壳定义 monitor
角色来配置只读访问权限。
15.4.1 使用 Hawk2 创建只读 monitor 角色 #
下面的过程说明如何通过定义 monitor
角色并将其指派给用户来配置对群集配置的只读访问权限。您也可以根据过程 15.4 “使用 crmsh 添加 monitor 角色并指派用户”中所述使用 crmsh 来实现此目的。
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
。单击
。输入唯一的
,例如monitor
。对于访问
,选择Read
。在
中,输入 XPath 表达式/cib
。图 15.1︰ Hawk2 创建角色 #单击
。如此即会创建名为
monitor
的新角色,为其设置read
权限,并使用 XPath 表达式/cib
将此配置应用到 CIB 中的所有元素。如果需要,请通过单击加号图标并指定相应参数添加更多规则。
使用向上或向下箭头按钮对各规则排序。
要配置资源或约束的访问权限,还可使用第 15.8 节 “通过缩写设置 ACL 规则”中所述的缩写语法。
15.4.2 使用 crmsh 创建只读 monitor 角色 #
下面的过程说明如何通过定义 monitor
角色并将其指派给用户来配置对群集配置的只读访问权限。
以
root
身份登录。启动 crmsh 的交互模式:
#
crm configure
crm(live)configure#
定义 ACL 角色:
使用
role
命令定义新角色:crm(live)configure#
role monitor read xpath:"/cib"
上面的命令会创建名为
monitor
的新角色,为其设置read
权限,并使用 XPath 表达式/cib
将此配置应用到 CIB 中的所有元素。如有必要,可添加更多访问权限和 XPath 自变量。根据需要添加其他角色。
将角色指派给一个或多个 ACL 目标,即相应的系统用户。确保这些目标属于
haclient
组。crm(live)configure#
acl_target tux monitor
检查更改:
crm(live)configure#
show
提交更改:
crm(live)configure#
commit
要配置资源或约束的访问权限,还可使用第 15.8 节 “通过缩写设置 ACL 规则”中所述的缩写语法。
15.5 去除用户 #
以下小节介绍如何使用 Hawk2 或 crmsh 从 ACL 中去除现有用户。
15.5.1 使用 Hawk2 去除用户 #
要从 ACL 中去除用户,请执行以下步骤:
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
。要去除系统用户(ACL 目标),请单击
列下方的垃圾桶图标。在对话框中进行确认。
15.5.2 使用 crmsh 去除用户 #
要从 ACL 中去除用户,请以用户名替换占位符 USER:
#
crm configure delete USERNAME
或者,您也可以使用 edit
子命令:
#
crm configure edit USERNAME
15.6 去除现有角色 #
以下小节介绍如何使用 Hawk2 或 crmsh 去除现有角色。
请注意,不能有任何用户属于此角色。如果角色中仍存在用户的引用,则不能删除该角色。请在删除角色前先删除用户的引用。
15.6.1 使用 Hawk2 去除现有角色 #
要移除角色,请执行以下步骤:
登录 Hawk2:
https://HAWKSERVER:7630/
在左侧导航栏中,选择
。要去除角色,请单击
列下方的垃圾桶图标。在对话框中进行确认。如果有错误消息显示,请确保您的角色是“空的”,没有引用任何角色。
15.6.2 使用 crmsh 去除现有角色 #
要去除现有角色,请以角色名称替换占位符 ROLE:
#
crm configure delete ROLE
15.7 通过 XPath 表达式设置 ACL 规则 #
要通过 XPath 管理 ACL 规则,需要知道基础 XML 的结构。可使用以下命令来检索结构(该命令将显示 XML 格式的群集配置,请参见例 15.1):
#
crm configure show xml
<cib> <!-- ... --> <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 文档中查找节点。例如,要选择根节点 (cib
),请使用 XPath 表达式 /cib
。要查找全局群集配置,请使用 XPath 表达式 /cib/configuration/crm_config
。
作为示例,下面列出了用于创建“操作员”角色的 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
查看群集的状态。
15.8 通过缩写设置 ACL 规则 #
不想使用 XML 结构的用户可以采用更简单的方法。
例如,请考虑以下 XPath:
//*[@id="rsc1"]
它会查找 ID 为 rsc1
的所有 XML 节点。
缩写语法与以下内容类似:
ref:"rsc1"
这同样适用于约束。这是详细的 XPath:
//constraints/rsc_location
缩写语法与以下内容类似:
type:"rsc_location"
可以在 crmsh 和 Hawk2 中使用缩写语法。CIB 守护程序知道如何将 ACL 规则应用到匹配的对象。