适用于 SUSE Linux Enterprise High Availability Extension 12

9 访问控制列表

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

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

9.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/ 的规范。

9.2 在群集中启用 ACL

在开始配置 ACL 之前,需要先启用 ACL。要执行此操作,请在 crmsh 中使用以下命令:

root # crm configure property enable-acl=true

也可以根据过程 9.1, “使用 Hawk 启用 ACL”中所述使用 Hawk。

过程 9.1 使用 Hawk 启用 ACL
  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择群集属性

  3. CRM 配置组中,从空下拉框中选择 enable-acl 属性,然后单击加号图标添加该属性。

  4. 要设置 enable-acl=true,请激活 enable-acl 旁边的复选框,并确认您所做的更改。

9.3 ACL 的基本原理

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

  • 访问权限,例如拒绝

  • 规则应用位置的规范。此规范可以是标记、ID 参考、标记 + ID 参考或 XPath 表达式。

通常,方便的做法是在角色中捆绑 ACL 并将特定角色指派给用户。也可以直接为单个用户配置 ACL。

创建 ACL 规则的方法有两种:

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

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

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

表 9.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='is-managed']

选择是否应管理资源。

//constraints/rsc_location

将资源从一个节点迁移/移动到另一个节点。

/cib

查看群集的状态。

9.3.2 通过标记缩写设置 ACL 规则

对于不想使用 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 规则应用到匹配的对象。

9.4 使用 Hawk 配置 ACL

以下过程说明如何通过定义 monitor 角色并将其指派给用户,来配置对群集配置的只读访问权。您也可以根据过程 9.3, “使用 crmsh 添加 Monitor 角色并指派用户”中所述使用 crmsh 来实现此目的。

过程 9.2 使用 Hawk 添加 Monitor 角色并指派用户
  1. 第 5.1.1 节 “启动 Hawk 并登录”中所述,启动 Web 浏览器并登录到群集。

  2. 在左侧导航栏中,选择访问控制列表。视图将显示已定义的角色用户

  3. 定义 ACL 角色:

    1. 选择角色类别,然后单击加号图标。

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

    3. 本示例是要定义一个 monitor 角色,因此请从权限下拉框中选择

    4. Xpath 文本框中,输入 Xpath 表达式 /cib 并单击创建角色

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

    5. 如果需要,可以通过单击加号图标并指定相应的参数,来添加更多的访问权限和 XPath 自变量。确认更改。

  4. 将角色指派给用户:

    1. 选择用户类别,然后单击加号图标。

      创建用户视图中会显示可用的角色。此外,该视图中还包含一个附加行用于配置该用户的个别 ACL 规则。在该视图中,您可以向用户指派一个或多个角色,或者为该用户定义一个或多个不同的规则。选择某个角色后各规则对应的行将会消失;取消选择后,该行将会显示。无法同时指派角色和定义各个规则。

    2. 输入唯一的用户 ID,例如 tux。确保此用户属于 haclient 组。

    3. 要将角色指派给用户,请从角色中选择相应的条目。对于本示例,请选择您创建的 monitor 角色。

      要取消选择一个或多个角色,请再次单击相应的条目。如果未选择任何角色,用于定义各规则的行会再次显示。

      Hawk - 向用户指派角色或规则
      图 9.1 Hawk - 向用户指派角色或规则
    4. 如果想要定义单个规则,请选择权限并为该规则输入相应的 Xpath 参数。单击加号图标可定义更多规则。

    5. 确认您的选择,然后单击创建用户将角色或规则指派给用户。

要配置资源或约束的访问权限,还可使用第 9.3.2 节 “通过标记缩写设置 ACL 规则”中所述的缩写语法。例如,如果拥有 ID 为 rsc1 的基元资源,请为标记参照输入以下值:primitiversc1。只输入 rsc1 作为参照的好处在于,它可以同时匹配基元资源与本地资源管理器资源 (LRM)。这样,您便可以在配置 rsc1 的同时清理其状态。

9.5 使用 crmsh 配置 ACL

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

过程 9.3 使用 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. 将角色指派给一个或多个用户。确保这些用户属于 haclient 组。

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

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

    crm(live)configure# commit

要配置资源或约束的访问权限,还可使用第 9.3.2 节 “通过标记缩写设置 ACL 规则”中所述的缩写语法。如果有 ID 为 rsc1 的原始资源,则使用以下表示法设置访问权限:write tag:"primitive" ref:"rsc1"。还可使用 write ref:"rsc1" 参考该 ID。这种做法的好处在于,可以同时匹配基元资源与本地资源管理器资源 (LRM)。这样,您便可以在配置 rsc1 的同时清理其状态。

9.6 更多信息

请参见 http://www.clusterlabs.org/doc/acls.html

打印此页