套用至 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 文件中尋找節點。例如,若要選取根節點 (cib),請使用 XPath 運算式 /cib。若要尋找全域叢集組態,請使用 XPath 運算式 /cib/configuration/crm_config

例如,表格 12.1 「Operator 角色 — 存取類型和 XPath 運算式」顯示了用於建立operator角色的參數 (存取類型和 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 運算式 /cib 做為 Xpath

  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 規則」所述使用簡寫語法。

列印此頁面