ZooKeeper 類似檔案系統,Client 可以在上面建立節點、更新節點、删除節點等如何做到權限的控制?查閱文檔,zk的ack(Access Control List)能夠保證權限,但是調研完後發現它不是很好用。
ACL 權限控制,使用:schema:id :permission 來辨別,主要涵蓋 3 個方面:
權限模式(Schema):鑒權的政策
授權對象(ID)
權限(Permission)
其特性如下:
ZooKeeper的權限控制是基于每個znode節點的,需要對每個節點設定權限
每個znode支援設定多種權限控制方案和多個權限
子節點不會繼承父節點的權限,用戶端無權通路某節點,但可能可以通路它的子節點
一、接下來,我們逐一講解schema、id和permission三個知識點。
1、schema:
ZooKeeper内置了一些權限控制方案,可以用以下方案為每個節點設定權限:
方案
描述
world
隻有一個使用者:anyone,代表所有人(預設)
ip
使用IP位址認證
auth
使用已添加認證的使用者認證
digest
使用“使用者名:密碼”方式認證
2、id:
授權對象ID是指,權限賦予的使用者或者一個實體,例如:IP 位址或者機器。授權模式 schema 與 授權對象 ID 之間關系:
3、權限permission:
權限
ACL簡寫
CREATE
c
可以建立子節點
DELETE
d
可以删除子節點(僅下一級節點)
READ
r
可以讀取節點資料及顯示子節點清單
WRITE
w
可以設定節點資料
ADMIN
a
可以設定節點通路控制清單權限
二、權限相關指令:
指令
使用方式
getAcl
getAcl <path>
讀取ACL權限
setAcl
setAcl <path> <acl>
設定ACL權限
addauth
addauth <scheme> <auth>
添加認證使用者
三、實戰:
1、World方案:
1)設定方式
<code>setAcl <path> world:anyone:<acl></code>
2)用戶端執行個體:
2、IP方案:
<ip>:可以是具體IP也可以是IP/bit格式,即IP轉換為二進制,比對前bit位,如192.168.0.0/16比對192.168.*.*
2)用戶端執行個體
3、Auth方案
4、Digest方案
這裡的密碼是經過SHA1及BASE64處理的密文,在SHELL中可以通過以下指令計算:
先來計算一個密文
5、java客戶單執行個體:
輸出: