天天看點

ZooKeeper ACL權限控制

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 之間關系:

ZooKeeper ACL權限控制

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 &lt;path&gt; world:anyone:&lt;acl&gt;</code>

2)用戶端執行個體:

2、IP方案:

&lt;ip&gt;:可以是具體IP也可以是IP/bit格式,即IP轉換為二進制,比對前bit位,如192.168.0.0/16比對192.168.*.*

2)用戶端執行個體

3、Auth方案

4、Digest方案

這裡的密碼是經過SHA1及BASE64處理的密文,在SHELL中可以通過以下指令計算:

先來計算一個密文

5、java客戶單執行個體:

輸出:

上一篇: MySQL權限