Zookeeper之ACL权限控制详解

2023-08-23 Zookeeper

针对节点可以设置相关读写等权限,目的为了保障数据安全性;权限permissions可以指定不同的权限范围以及角色。

  • getAcl:获取某个节点的acl权限信息
  • setAcl:设置某个节点的ac|权限信息
    • setAcl <path> world:anyone:crwd:表示任何人都有创建、读取、写入、删除该节点的权限
  • addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密的形式存在的

# 权限的构成

zk的ACL通过[scheme:id:permissions]来构成权限列表

  • scheme:代表采用的某种权限机制

    • world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:[permissions]
    • auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]
    • digest:需要对密码加密才能访问,组合形式为digest: username:BASE64(SHA1(password)):[permissions]
    • ip:限制制定ip才可访问,比如ip:192.168.1.1:[permissions]
  • id:代表允许访问的用户

  • permissions:权限组合字符串,权限字符串缩写crdwa

    • create:创建子节点
    • read:获取当前节点/子节点
    • write:设置节点数据
    • delete:删除子节点
    • admin:设置当前节点的权限

# 实战演练

# 1.scheme之world功能演示

[zk: localhost:2181(CONNECTED) 18] create /xk857/abc abc # 创建/xk857/abc节点,并设置值为abc
Created /xk857/abc

[zk: localhost:2181(CONNECTED) 19] getAcl /xk857/abc    # 查看/xk857/abc节点的权限
'world,'anyone # 所有人
: cdrwa #可进行增删改查及设置权限

[zk: localhost:2181(CONNECTED) 20] setAcl /xk857/abc world:anyone:crwa # 设置该节点下的子节点不可删除
cZxid = 0x3 # ……输出的数据不重要这里省略

[zk: localhost:2181(CONNECTED) 21] getAcl /xk857/abc    # 获取该节点,检查权限发现d没有了 
'world,'anyone
: crwa

[zk: localhost:2181(CONNECTED) 22] creat /xk857/abc/bcd bcd #在 /xk857/abc 节点下创建子节点
ZooKeeper -server host:port cmd args  # ……
[zk: localhost:2181(CONNECTED) 23] delete /xk857/abc/bcd # 尝试删除子节点
Node does not exist: /xk857/abc/bcd # 提示没有权限

# 2.scheme之auth功能演示

[zk: localhost:2181(CONNECTED) 25] addauth digest xk857:xk857  #创建用户,账号密码都是xk857
[zk: localhost:2181(CONNECTED) 26] setAcl /xk857/abc auth:xk857:xk857:cdrwa # 设置节点 /xk857/abc 对xk857账号开放所有权限
cZxid = 0x3  # ……

[zk: localhost:2181(CONNECTED) 27] getAcl /xk857/abc #获取节点权限数据
'digest,'xk857:+3c13f0N7Xwl04rR6Bnc+HcJuLQ= # 密码是加密存储的,不明文显示
: cdrwa

# 3.scheme之digest功能演示

auth和digest命令功能类似,只不过使用digest命令输入密码是密文。

[zk: localhost:2181(CONNECTED) 33] setAcl /xk857/abc digest:xk857:+3c13f0N7Xwl04rR6Bnc+HcJuLQ=:cdra # 密码使用加密方式
[zk: localhost:2181(CONNECTED) 34] addauth digest xk857:xk857 #但是登录时仍使用明文,addauth第一次是创建用户,后续则是登录

执行 addauth digest username:password 命令后,当客户端连接到Zookeeper服务器时,会将用户名和密码用MD5哈希算法加密后发送给服务器进行身份验证。如果身份验证成功,则客户端可以访问受保护的znode节点。

# 4.id设置

[zk: localhost:2181(CONNECTED) 0] create /xk857/ip ipadd
Created /xk857/ip

[zk: localhost:2181(CONNECTED) 2] setAcl /xk857/ip ip:192.168.31.11:cdrwa
上次更新: 6 个月前