crm 外圍程序 (crmsh) 或 Hawk 等叢集管理工具可由 root 或 haclient 群組中的任何使用者使用。依預設,這些使用者擁有完整的讀取/寫入存取權。若要限制存取權或指定更精細的存取權限,可以使用存取控制清單 (ACL)。
存取控制清單由一組排序的存取規則構成。每個規則允許對一部分叢集組態進行讀取或寫入存取,或者拒絕對該部分進行存取。多個規則通常會組合起來構成特定的角色,這樣便可以將使用者指定到與其任務相符的角色。
在您開始對叢集使用 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/ 上查詢規格。
在開始設定 ACL 之前,需要先啟用 ACL。若要實現此目的,請在 crmsh 中使用以下指令:
root #crmconfigure property enable-acl=true
也可以依照過程 9.1, “使用 Hawk 啟用 ACL”所述使用 Hawk。
啟動網頁瀏覽器並依第 5.1.1 節「啟動 Hawk 及登入」 所述登入叢集。
在左側導覽列中選取。
在 群組中,從空白下拉式方塊中選取 屬性,然後按一下加號圖示新增該屬性。
若要設定 enable-acl=true,請啟用 enable-acl 旁邊的核取方塊,並確認您所做的變更。
存取控制清單由一組排序的存取規則構成。每個規則允許對一部分叢集組態進行讀取或寫入存取,或者拒絕對該部分進行存取。多個規則通常會組合起來構成特定的角色,這樣便可以將使用者指定到與其任務相符的角色。ACL 角色是一組用於描述 CIB 存取權限的規則。規則由以下元素組成:
存取權限,例如讀取、寫入或拒絕
定義在何種情況下套用規則的規格。此規格可以是標記、ID 參考、標記與 ID 參考的組合,或者是 XPath 運算式。
通常,便利的做法是將 ACL 綁定到角色,並將特定的角色指定給使用者。您也可以直接為個別使用者設定 ACL。
建立 ACL 規則的方法有兩種:
第 9.3.1 節「透過 XPath 運算式設定 ACL 規則」。您需要瞭解基礎 XML 的結構才能建立 ACL 規則。
第 9.3.2 節「透過標記縮寫設定 ACL 規則」。建立要套用至相符物件的簡寫語法與 ACL 規則。
若要透過 XPath 管理 ACL 規則,您需要瞭解基礎 XML 的結構。使用以下指令擷取結構,該指令將以 XML 格式顯示您的叢集組態 (請參閱範例 9.1 「XML 中的叢集組態摘錄」):
root #crmconfigure show 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 運算式)。具有此角色的使用者僅可執行第二欄中所述的任務 — 他們既不能重新設定任何資源 (例如,變更參數或操作),也不能變更並存或順序條件約束的組態。
|
類型 |
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 檢視叢集的狀態。 |
不想處理 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 規則套用至相符物件。
下面的程序說明如何透過定義 monitor 角色並將其指定給使用者,來設定對叢集組態的唯讀存取權。您也可以依照過程 9.3, “使用 crmsh 新增 Monitor 角色並指定使用者”所述使用 crmsh 來實現此目的。
啟動網頁瀏覽器並依第 5.1.1 節「啟動 Hawk 及登入」 所述登入叢集。
在左側導覽列中選取。檢視窗會顯示已定義的與。
若要定義 ACL 角色:
選取類別並按一下加號圖示。
輸入唯一的,例如 monitor。
本範例是要定義一個 monitor 角色,因此請從下拉式方塊中選取讀取。
在 文字方塊中,輸入 Xpath 運算式 /cib 並按一下。
這會建立一個名為 monitor 的新角色,為其設定讀取權限,並使用 XPath 運算式 /cib 將其套用至 CIB 中的所有元素。
如果需要,您可以透過按一下加號圖示並指定相應的參數,來新增更多的存取權限和 XPath 引數。確認您的變更。
將角色指定給使用者:
選取類別並按一下加號圖示。
檢視窗會顯示可用的角色。此外,它還包含額外的一行,用於設定該使用者的個別 ACL 規則。在該檢視窗中,您可以向使用者指定一或多個角色,或者為該使用者定義一或多個不同的規則。選取某個角色時,各個規則的行將會消失;取消選取某個角色時,該行將會顯示。您無法既指定角色又定義個別規則。
輸入唯一的,例如 tux。請確定此使用者屬於 haclient 群組。
若要將角色指定給使用者,請從中選取相應的項目。對於本範例,請選取您所建立的 monitor 角色。
若要取消選取一或多個角色,請再次按一下相應的項目。如果未選取任何角色,用於定義個別規則的行將再次顯示。
如果您要定義個別規則,請選取一個,並為要定義的規則輸入相應的 Xpath 參數。按一下加號圖示可定義更多規則。
確認您的選擇,然後按一下將角色或規則指定給使用者。
若要設定對資源或條件約束的存取權限,也可以依照第 9.3.2 節「透過標記縮寫設定 ACL 規則」所述使用簡寫語法。例如,如果您有一個 ID 為 rsc1 的基本資源,請為和輸入以下值:primitive 和 rsc1。只輸入 rsc1 做為的好處是,可以使基本資源與本地資源管理員資源 (LRM) 相符。如此,您便可以設定 rsc1,同時清理其狀態。
下面的程序說明如何透過定義 monitor 角色並將其指定給使用者,來設定對叢集組態的唯讀存取權。
以 root 身分登入。
啟動 crmsh 的互動模式:
root #crmconfigurecrm(live)configure#
定義 ACL 角色:
使用 role 指令定義新角色:
crm(live)configure#rolemonitor read xpath:"/cib"
上面的指令會建立一個名為 monitor 的新角色,為其設定讀取權限,並使用 XPath 運算式 /cib 將其套用至 CIB 中的所有元素。如果需要,您可以新增更多存取權限及 XPath 引數。
根據需要新增其他角色。
將角色指定給一或多個使用者。請確定這些使用者屬於 haclient 群組。
crm(live)configure#acl_targettux monitor
檢查您的變更:
crm(live)configure#show
提交您的變更:
crm(live)configure#commit
若要設定對資源或條件約束的存取權限,也可以依照第 9.3.2 節「透過標記縮寫設定 ACL 規則」所述使用簡寫語法。如果您有一個 ID 為 rsc1 的基本資源,請使用以下表示法來設定存取權限:write tag:"primitive" ref:"rsc1"。您也可以使用 write ref:"rsc1" 來參考該 ID。這樣做的好處是,可以使基本資源與本地資源管理員資源 (LRM) 相符。如此,您便可以設定 rsc1,同時清理其狀態。