概述
Zookeeper類似於unix文件系統,節點類比文件,客戶端可以刪除節點,創建節點,修改節點。Zookeeper可以使用ACL(access control list)訪問控制列表來對節點的權限進行控制。
acl權限控制使用:scheme🆔permission來標誌,主要涵蓋三個方面:
- 權限模式(scheme):授權的策略。
- 權限對象(id):授權的對象。
- 權限(permission):授予的權限。
Zookeeper acl的特性:
- Zookeeper的權限控制是基於znode節點的,需要對每個節點設置權限。
- 每個znode支持設置多種權限控制方案和多個權限。
- 子節點不會繼承父節點的權限。客戶端無法訪問某個節點,但是可以訪問他的子節點。
權限模式種類
模式 | 描述 |
---|---|
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 | 添加認證用戶,類似於登錄操作 |
實戰
- 查看節點acl
這是創建節點時的默認acl ,表示任何連接到Zookeeper的客戶端都能對該節點進行cdrwa操作。
權限設置要使用模式 acl的模式爲 scheme: id:permission 比如 world:anyone:cdwa
world權限模式實戰
world權限模式只有一種設置模式。就是 setAcl world:anyone:[r][w][c][d][a]
-
取消節點讀取數據權限:
使用命令 setAcl /node1 world:anyone:cdwa
設置以後嘗試讀取/node1節點將是沒有權限 Authentication is not valid -
取消節點設置數據的權限
-
取消節點創建子節點的權限
-
取消刪除子節點的權限
-
取消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退出重新連接,因爲你當前已經添加了該用戶的授權。
這裏就不粘圖了。