适用于 SUSE Linux Enterprise High Availability Extension 12 SP5

12 访问控制列表

摘要

crm 外壳 (crmsh) 或 Hawk2 等群集管理工具可由 root 用户或 haclient 组内的任何用户使用。默认情况下,这些用户具有完全读/写访问权。要限制访问权或指派更加细化的访问权限,可以使用访问控制列表 (ACL)。

访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。

注意
注意:CIB 语法验证版本和 ACL 的差异

仅当您的 CIB 是使用 pacemaker-2.0 或更高 CIB 语法版本验证的情况下,此 ACL 文档才适用。有关如何查验这一点以及升级 CIB 版本的细节,请参见注意:升级 CIB 语法版本

如果您已从 SUSE Linux Enterprise High Availability Extension 11 SPx 升级并保留了以前的 CIB 版本,请参见 SUSE Linux Enterprise High Availability Extension 11 SP3 或更低版本的《管理指南》中的“访问控制列表”一章。网址:https://documentation.suse.com/sle-ha-11

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。

过程 12.1︰ 使用 Hawk 启用 ACL
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左侧导航栏中,选择群集配置显示全局群集选项及它们当前的值。

  3. 群集配置下面,单击空下拉框并选择 enable-acl 以添加该参数。系统即会添加该参数,且将其设为默认值 No

  4. 将其值设置为 Yes,然后应用更改。

12.3 ACL 的基本原理

访问控制列表由一组有序的访问规则构成。每个规则针对一部分群集配置赋予用户读取或写入访问权限,或拒绝其访问。规则通常会组合在一起产生特定角色,然后可以为用户指派与其任务匹配的角色。ACL 角色是用于描述对 CIB 访问权限的一组规则。规则包括以下组成部分:

  • 访问权限,例如拒绝

  • 规则应用位置的规范。此规范可以是类型、ID 参照或 XPath 表达式。

通常,方便的做法是在角色中捆绑 ACL 并将特定角色指派给系统用户(ACL 目标)。创建 ACL 规则的方法有两种:

12.3.1 通过 XPath 表达式设置 ACL 规则

要通过 XPath 管理 ACL 规则,需要知道基础 XML 的结构。可使用以下命令来检索结构(该命令将显示 XML 格式的群集配置,请参见例 12.1):

root # crm configure show xml
例 12.1︰ 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 表达式)。具有此角色的用户只能执行第二列中所述的任务 - 他们既不能重新配置任何资源(例如,更改参数或操作),也不能更改共置约束或顺序约束的配置。

表 12.1︰ Operator 角色 - 访问类型和 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.2︰ 使用 Hawk2 添加 Monitor 角色
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左侧导航栏中,选择角色

  3. 单击创建

  4. 输入唯一的角色 ID,例如 monitor

  5. 为访问权限选择读取

  6. Xpath 输入 Xpath 表达式 /cib

  7. 单击创建

    如此即会创建名为 monitor 的新角色,为其设置读取权限,并通过使用 XPath 表达式 /cib 将其应用到 CIB 中的所有元素。

  8. 如果需要,请通过单击加号图标并指定相应参数添加更多规则。

  9. 使用向上或向下箭头按钮对各规则排序。

过程 12.3︰ 使用 Hawk2 向目标指派角色

要向系统用户(即目标)指派我们在过程 12.2 中创建的角色,请执行以下操作继续:

  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左侧导航栏中,选择目标

  3. 要创建系统用户(即 ACL 目标),请单击创建,然后输入一个唯一的目标 ID,例如 tux。确保此用户属于 haclient 组。

  4. 要向目标指派角色,请选择一个或多个角色

    在本示例中,请选择您在过程 12.2 中创建的 monitor 角色。

  5. 确认您的选择。

要配置资源或约束的访问权限,还可使用第 12.3.2 节 “通过缩写设置 ACL 规则”中所述的缩写语法。

12.5 使用 crmsh 配置 ACL

以下过程说明如何通过定义 monitor 角色并将其指派给用户,来配置对群集配置的只读访问权。

过程 12.4︰ 使用 crmsh 添加 Monitor 角色并指派用户
  1. root 身份登录。

  2. 启动 crmsh 的交互模式:

    root # crm configure
    crm(live)configure# 
  3. 定义 ACL 角色:

    1. 使用 role 命令定义新角色:

      crm(live)configure# role monitor read xpath:"/cib"

      上面的命令会创建名为 monitor 的新角色,为其设置权限并通过使用 XPath 表达式 /cib 将其应用到 CIB 中的所有元素。如有必要,可添加更多访问权限和 XPath 自变量。

    2. 根据需要添加其他角色。

  4. 将角色指派给一个或多个 ACL 目标,即相应的系统用户。确保这些目标属于 haclient 组。

    crm(live)configure# acl_target tux monitor
  5. 检查更改:

    crm(live)configure# show
  6. 提交更改:

    crm(live)configure# commit

要配置资源或约束的访问权限,还可使用第 12.3.2 节 “通过缩写设置 ACL 规则”中所述的缩写语法。

打印此页