Zookeeper權限控制ACL詳解

概述

Zookeeper類似於unix文件系統,節點類比文件,客戶端可以刪除節點,創建節點,修改節點。Zookeeper可以使用ACL(access control list)訪問控制列表來對節點的權限進行控制。

acl權限控制使用:scheme🆔permission來標誌,主要涵蓋三個方面:

  • 權限模式(scheme):授權的策略。
  • 權限對象(id):授權的對象。
  • 權限(permission):授予的權限。
Zookeeper acl的特性:
  1. Zookeeper的權限控制是基於znode節點的,需要對每個節點設置權限。
  2. 每個znode支持設置多種權限控制方案和多個權限。
  3. 子節點不會繼承父節點的權限。客戶端無法訪問某個節點,但是可以訪問他的子節點。

權限模式種類

模式 描述
world 這種模式方法的授權對象只有一個anyone,代表登錄到服務器的所有客戶端都能對該節點執行某種權限
ip 對連接的客戶端使用IP地址認證方式進行認證
auth 使用以添加認證的用戶進行認證
digest 使用 用戶:密碼方式驗證

權限的類型

類型 ACL簡寫 描述
read r 讀取節點及顯示子節點列表的權限
write w 設置節點數據的權限
create c 創建子節點的權限
delete d 刪除子節點的權限
admin a 設置該節點ACL權限的權限

關於授權的命令

命令 用法 描述
getAcl getAcl path 讀取節點的ACL
setAcl setAcl path acl 設置節點的ACL
create create path data acl 創建節點時設置acl
addAuth addAuth scheme auth 添加認證用戶,類似於登錄操作

實戰

  1. 查看節點acl
    在這裏插入圖片描述
    這是創建節點時的默認acl ,表示任何連接到Zookeeper的客戶端都能對該節點進行cdrwa操作。

權限設置要使用模式 acl的模式爲 scheme: id:permission 比如 world:anyone:cdwa

world權限模式實戰

world權限模式只有一種設置模式。就是 setAcl world:anyone:[r][w][c][d][a]

  1. 取消節點讀取數據權限:
    使用命令 setAcl /node1 world:anyone:cdwa
    在這裏插入圖片描述
    設置以後嘗試讀取/node1節點將是沒有權限 Authentication is not valid

  2. 取消節點設置數據的權限
    在這裏插入圖片描述

  3. 取消節點創建子節點的權限
    在這裏插入圖片描述

  4. 取消刪除子節點的權限
    在這裏插入圖片描述

  5. 取消ACL相關權限
    在這裏插入圖片描述
    取消了a權限以後,getAcl setAcl命令都沒有權限。

IP權限模式實戰

該模式使用的acl方式是 ip:192.168.10.127:[a][d][c][w][r]
在這裏插入圖片描述
設置只有ip爲192.168.18.135的客戶端連接才能進行adc操作,其他ip啥操作都做不了。因爲圖中設置ACL的客戶端不是這個ip,所以設置了後,他就失去對該節點的權限了,所以getAcl命令會沒有權限。

在這裏插入圖片描述
這個是ip爲192.168.18.135的客戶端連接,有a權限,所以能夠執行getAcl操作。但是沒有r權限,所以還是不讀讀取節點數據。

auth授權模式實戰

這個要配合addauth命令。
第一步:先添加授權用戶 addauth digest username:password
第二步:設置該節點只有登錄了該授權用戶的客戶端連接才能進行操作。
setAcl /path auth:username:acl
12在這裏插入圖片描述
0uek/hZ/…是賬號admin 和密碼123456 經過sha1和base64加密後的密文密碼。

把客戶端quit退出重新連接後:
在這裏插入圖片描述
失去了對該節點的權限。需要使用addauth命令添加授權纔行。類似登錄之後才能對該節點有權限。
在這裏插入圖片描述

digest授權模式實戰

digest授權模式基於賬號密碼的授權模式,與Auth模式類似,只是他設置權限之前不用使用
addauth digest username:password進行權限用戶添加。

直接使用命令 setAcl path digest:username:password:acl 進行授權就行。只是這裏的密碼要使用加密後的密碼,不能使用銘文密碼。

可以使用linux命令進行
echo -n username:password | openssl dgst -binary -sha1 | openssl base64 得到加密後的密碼,這裏的password是銘文密碼

在這裏插入圖片描述
複製加密後的密碼

在這裏插入圖片描述
設置權限後已經沒有該節點的權限了,原因是我們沒有登錄。
在這裏插入圖片描述
登錄後就有該節點的權限了,登錄使用明文密碼進行登錄。

設置多個權限

可以設置多種acl,用逗號隔開就行。
在這裏插入圖片描述

以上權限是ip爲192.168.18.130的客戶端具有adc權限。
用admin登錄的用戶具有adcwr權限。
所有人都要r權限。

測試 用admin登錄的用戶具有adcwr權限。需要quit退出重新連接,因爲你當前已經添加了該用戶的授權。
這裏就不粘圖了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章