13 存取控制清單 #
Crm 外圍程序 (crmsh) 或 Hawk2 等叢集管理工具可由 root
使用者或 haclient
群組中的任何使用者使用。依預設,這些使用者擁有完整的讀取/寫入存取權。若要限制存取權或指定更精細的存取權限,可以使用存取控制清單 (ACL)。
存取控制清單由一組排序的存取規則構成。每個規則允許對一部分叢集組態進行讀取或寫入存取,或者拒絕對該部分進行存取。多個規則通常會組合起來構成特定的角色,這樣便可以將使用者指定到與其任務相符的角色。
僅當您的 CIB 是由 pacemaker-2.0
或更高 CIB 語法版本驗證時,此 ACL 文件才適用。如需關於如何檢查這一點以及升級 CIB 版本的詳細資料,請參閱注意:升級 CIB 語法版本。
13.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
也永遠擁有對叢集組態的完整存取權。
13.2 概念綜覽 #
存取控制清單由一組排序的存取規則構成。每個規則允許對一部分叢集組態進行讀取或寫入存取,或者拒絕對該部分進行存取。多個規則通常會組合起來構成特定的角色,這樣便可以將使用者指定到與其任務相符的角色。ACL 角色是一組用於描述 CIB 存取權限的規則。規則由以下元素組成:
存取權限,例如
讀取
、寫入
或拒絕
定義在何種情況下套用規則的規格。此規格可以是類型、ID 參考或 XPath 運算式。XPath 是一種用於在 XML 文件中選取節點的語言。請參閱 http://en.wikipedia.org/wiki/XPath。
通常,便利的做法是將 ACL 綁定到角色,並將特定的角色指定給系統使用者 (ACL 目標)。建立 ACL 角色的方法有以下幾種:
第 13.7 節 「透過 XPath 運算式設定 ACL 規則」。您需要瞭解基礎 XML 的結構才能建立 ACL 規則。
第 13.8 節 「透過縮寫設定 ACL 規則」。建立要套用至相符物件的簡寫語法與 ACL 規則。
13.3 在叢集中啟用 ACL #
在開始設定 ACL 之前,需要先啟用 ACL。若要實現此目的,請在 crmsh 中使用以下指令:
root #
crm
configure property enable-acl=true
或者,依程序 13.1 「使用 Hawk 啟用 ACL」所述使用 Hawk2。
登入 Hawk2:
https://HAWKSERVER:7630/
在左側導覽列中,選取
以顯示全域叢集選項及它們目前的值。在
下方,按一下空下拉式方塊並選取 以新增該參數。系統即會新增該參數,且將其設為預設值No
。將其值設定為
Yes
,然後套用變更。
13.4 建立唯讀 monitor 角色 #
以下小節介紹如何使用 Hawk2 或 crm 外圍程序定義 monitor
角色,以設定唯讀存取權。
13.4.1 使用 Hawk2 建立唯讀 monitor 角色 #
下面的程序說明如何透過定義 monitor
角色並將其指定給使用者,來設定對叢集組態的唯讀存取權限。您也可以依照程序 13.4 「使用 crmsh 新增 monitor 角色並指定使用者」所述使用 crmsh 來實現此目的。
若要設定對資源或條件約束的存取權限,也可以依照第 13.8 節 「透過縮寫設定 ACL 規則」所述使用簡寫語法。
13.4.2 使用 crmsh 建立唯讀 monitor 角色 #
下面的程序說明如何透過定義 monitor
角色並將其指定給使用者,來設定對叢集組態的唯讀存取權。
以
root
身分登入。啟動 crmsh 的互動模式:
root #
crm
configurecrm(live)configure#
定義 ACL 角色:
使用
role
指令定義新角色:crm(live)configure#
role
monitor read xpath:"/cib"上面的指令會建立一個名為
monitor
的新角色,為其設定讀取
權限,並使用 XPath 運算式/cib
將其套用至 CIB 中的所有元素。如果需要,您可以新增更多存取權限及 XPath 引數。根據需要新增其他角色。
將角色指定給一或多個 ACL 目標,即相應的系統使用者。請確定他們屬於
haclient
群組。crm(live)configure#
acl_target
tux monitor檢查您的變更:
crm(live)configure#
show
提交您的變更:
crm(live)configure#
commit
若要設定對資源或條件約束的存取權限,也可以依照第 13.8 節 「透過縮寫設定 ACL 規則」所述使用簡寫語法。
13.5 移除使用者 #
以下小節介紹如何使用 Hawk2 或 crmsh 從 ACL 中移除現有使用者。
13.5.1 使用 Hawk2 移除使用者 #
若要從 ACL 中移除使用者,請執行以下步驟:
登入 Hawk2:
https://HAWKSERVER:7630/
在左側導覽列中,選取
。若要移除系統使用者 (ACL 目標),請按一下
欄下方的垃圾桶圖示。在對話方塊中進行確認。
13.5.2 使用 crmsh 移除使用者 #
若要從 ACL 中移除使用者,請以使用者名稱取代預留位置 USER:
root #
crm
configure delete USERNAME
或者,您也可以使用 edit
子指令:
root #
crm
configure edit USERNAME
13.6 移除現有角色 #
以下小節介紹如何使用 Hawk2 或 crmsh 移除現有角色。
請注意,不能有任何使用者屬於此角色。如果角色中仍存在使用者的參考,則不能刪除該角色。請在刪除角色前先刪除使用者的參考。
13.6.1 使用 Hawk2 移除現有角色 #
若要移除角色,請執行以下步驟:
登入 Hawk2:
https://HAWKSERVER:7630/
在左側導覽列中,選取
。若要移除角色,請按一下
欄下方的垃圾桶圖示。在對話方塊中進行確認。如果有錯誤訊息顯示,請確定您的角色是「空的」,沒有參考任何角色。
13.6.2 使用 crmsh 移除現有角色 #
若要移除現有角色,請以角色名稱取代預留位置 ROLE:
root #
crm
configure delete ROLE
13.7 透過 XPath 運算式設定 ACL 規則 #
若要透過 XPath 管理 ACL 規則,您需要瞭解基礎 XML 的結構。使用以下指令擷取結構,該指令將以 XML 格式顯示您的叢集組態 (請參閱範例 13.1):
root #
crm
configure show xml
<cib> <!-- ... --> <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
。
例如,表格 13.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='maintenance'] 選擇是否應將資源置於維護模式。 |
寫入 |
//constraints/rsc_location 將資源從一個節點移轉/移動到另一個節點。 |
讀取 |
/cib 檢視叢集的狀態。 |
13.8 透過縮寫設定 ACL 規則 #
不想使用 XML 結構的使用者可以採用更簡單的方法。
例如,您可以考慮使用如下 Xpath:
//*[@id="rsc1"]
它會尋找 ID 為 rsc1
的所有 XML 節點。
相應的簡寫語法如下:
ref:"rsc1"
這也適用於條件約束。以下是詳細的 XPath:
//constraints/rsc_location
相應的簡寫語法如下:
type:"rsc_location"
可以在 crmsh 和 Hawk2 中使用簡寫語法。CIB 精靈知道如何將 ACL 規則套用至相符物件。