乙個zookeeper節點中不僅包含了儲存的資料,還有 acl(access control list)。節點建立時,可以給它設定乙個acl,來決定誰可以對節點做哪些操作。
acl 具有以下特點:
1. zookeeper的許可權控制是基於每個znode節點的,需要對每個節點設定許可權
2. 每個znode支援設定多種許可權控制方案和多個許可權
3. 子節點不會繼承父節點的許可權,客戶端無權訪問某節點,但可能可以訪問它的子節點
4. 所以任何乙個客戶端都可以通過exists 操作來獲得任何znode的狀態,從而得知znode是否真的存在。
acl 相關命令命令
語法描述
getacl
getacl path
讀取某個節點acl許可權
setacl
setacl path acllist
設定某個節點acl許可權
addauth
addauth scheme authinfo
新增認證使用者
create
create [-s] [-e] path data acllist
建立節點時指明 acl 許可權
acl permissions
acl 許可權
acl 簡寫
允許的操作
create
c建立子節點
delete
d刪除子節點 (僅下一級節點)
read
r獲取節點的資料和它的子節點
write
w設定節點的資料
admin
a設定 acl 許可權
acl schemes
zookeeper內建了一些許可權控制方案,可以用以下方案為每個節點設定許可權:
方案描述
world
只有乙個使用者:anyone,代表所有人(預設)
ip使用ip位址認證
auth
使用已新增認證的使用者認證
digest
使用「使用者名稱:密碼」方式認證
acl是由鑑權方式(scheme)、該鑑權方式的id(使用者或ip位址)和乙個許可權(permession)的集合組成。例如,我們想通過乙個ip位址為10.0.0.1的客戶端訪問乙個節點。那麼,我們需要為節點設定乙個acl,鑑權方式使用ip鑑權方式,鑑權方式的id為10.0.0.1,只允許讀許可權。那麼 acl 的格式就是:ip:10.0.0.1:w
world 方案
預設情況下使用 world 方法,任何人有所有許可權:
建立節點/abc,賦值20190825,預設具有world全部許可權
修改(設定)許可權:setacl world:anyone:
修改節點/abc許可權,從cdrwa改為drwa,建立子節點失敗(正常建立節點時會列印created,如上圖)
ip 方案
:可以是具體ip也可以是ip/bit格式,即ip轉換為二進位制,匹配前bit位,如192.168.0.0/16匹配192.168.*.*
設定方式:setacl ip::
每種許可權模式也支援在節點建立時直接指定,這樣就不是預設的world模式。
初始化設定方式:create node data ip::
auth 方案
設定方式
addauth digest :#新增認證使用者,可以是新使用者或老使用者,老使用者密碼表示鑑權,新使用者密碼組合表示新增及鑑權,乙個使用者名稱支援匹配多個密碼,乙個使用者加乙個密碼組成一對認證資訊
setacl auth::
最後getacl查詢到的密碼為sha62加密過的密碼
乙個使用者支援多個密碼
digest 方案
設定方式
setacl digest:::
這裡的密碼是經過sha1及base64處理的密文,這也是digest和auth兩種許可權模式的區別,auth為傳入明文自動生成秘文,無需使用者自己生成,直接設定即可。
在shell中可以通過以下命令計算:
echo -n :| openssl dgst -binary -sha1 | openssl base64
先來算乙個密文密碼:
注意了!使用 rmr 刪除節點沒有許可權時,竟然可以使用 delete
待補充:刪除目錄,刪除節點,建立不含value的節點,同乙個節點既是目錄又有資料,無法建立節點,無報錯
ZooKeeper許可權控制
目前在公司內部使用zookeeper的地方越來越多,應用大多喜歡自己部署一套zk集群來使用。考慮到zk的高可用,並且一套zk集群至少3臺機器,那麼每個應用,尤其是一些非核心應用都自己去部署一套的話,對資源利用率很低。另外,隨著zk容災的提出,單套zk集群使用的機器量會更大,運維人員開始 對這個情況擔...
Zookeeper 許可權控制
1.acl access control lists 針對節點設定相關讀寫等許可權,目的為了保障資料的安全性。許可權permissions可以指定不同的許可權範圍以及角色。2.acl命令列 getacl 獲取某個節點的acl許可權資訊。setacl 設定某個節點的acl許可權資訊。addauth 輸...
zookeeper之許可權控制 ACL
1.許可權控制 zookeeper集群中,通常是由乙個統一的zookeeper集群來為若干個應用提供服務。而此時,各應用之間不存在資料的共享操作場景。因此為了避免zookeeper伺服器上的資料資源被其他程序意外操作修改,需要解決不同應用之間的許可權問題 即對zookeeper伺服器上的資料訪問進行...