套用至 SUSE Linux Enterprise High Availability Extension 12

9 存取控制清單

crm 外圍程序 (crmsh) 或 Hawk 等叢集管理工具可由 roothaclient 群組中的任何使用者使用。依預設,這些使用者擁有完整的讀取/寫入存取權。若要限制存取權或指定更精細的存取權限,可以使用存取控制清單 (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 及登入」 所述登入叢集。

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

例如,表格 9.1 「Operator 角色 — 存取類型和 XPath 運算式」顯示了用於建立operator角色的參數 (存取類型和 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 是一個參考 ID 為 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 及登入」 所述登入叢集。

  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

列印此頁面