概述

zookeeper类似文件系统,client 可以创建节点、更新节点、删除节点。zookeeper的access control list 访问控制列表可以对节点权限的控制。acl权限列表特点如下:

  • zooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  • 每个znode支持设置多种权限控制方案和多个权限
  • 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点

acl权限控制,使用scheme:id:permission来标识,主要涵盖 3 个方面:

  • 权限模式(scheme):授权的策略

权限模式

命令格式

描述

world

setAcl <path> world:anyone:<acl>

只有一个用户:anyone,代表登录zokeeper所有人(默认)

ip

setAcl <path> ip:<ip>:<acl>

对客户端使用IP地址认证

auth

setAcl <path> auth:<user>:<acl>

使用已添加认证的用户认证(密码使用明文)

digest

setAcl <path> digest:<user>:<password>:<acl>

使用“用户名:密码”方式认证(密码使用密文)

  • 授权对象(id):授权的对象
    给谁授予权限,授权对象ID是指,权限赋予的实体,例如:IP 地址或用户。
  • 权限(permission):授予的权限
    授予的全下你包括,create、delete、read、write、admin也就是 增、删、查、改、管理权限, 这5种权限简写为cdrwa。注意:这5种权限中,delete是针对删除子节点和自身节点都有效的权限,create是只针对添加子节点有效的权限,其它3种权限指对自身节点的操作权限。

权限

ACL简写

描述

create

c

创建子节点权限

delete

d

删除自身节点和子节点权限

read

r

读取当前节点数据

write

w

设置当前节点数据权限

admin

a

设置节点访问控制列表权限,即设置cdrwa权限的权限

授权的相关命令

命令

描述

getAcl

读取ACL权限

setAcl

设置ACL权限

addauth

添加认证用户

权限实操

  1. world授权模式
  2. zookeeper的权限设置 zookeeper权限控制_大数据

  3. 只演示删除权限,其他权限自行实操。
  4. ip授权模式
    准备两台机器(可以使用克隆),比如我的一台机器192.168.64.129连接自己本地的zookeeper服务,另外一台机器192.168.64.132连接192.168.64.129服务。
  5. zookeeper的权限设置 zookeeper权限控制_大数据_02


  6. zookeeper的权限设置 zookeeper权限控制_大数据_03

  7. auth授权模式
    使用auth授权模式,先添加认证用户,命令格式:addauth digest <user>:<password>
  8. zookeeper的权限设置 zookeeper权限控制_zookeeper的权限设置_04

  9. quit命令,退出当前会话,并使用./zkCli.sh重新连接客户端。
  10. zookeeper的权限设置 zookeeper权限控制_zookeeper的权限设置_05

  11. 重新认证的密码要和设置权限明文密码一样,即使不一样也不会报错,只是没有节点相应操作而已。
  12. digest授权模式
    digest授权需要将密文加密后,用密文进行授权,明文加密成密文命令格式如下:
    echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
  13. zookeeper的权限设置 zookeeper权限控制_子节点_06


  14. zookeeper的权限设置 zookeeper权限控制_zookeeper的权限设置_07

  15. auth模式和digest模式本质都一样的,只是前者用明文赋予权限,后者用密文赋予权限。前者先认证后授权,后者先授权后认证,所以auth授权后仍然能访问节点,后者授权后需要重新认证后才能访问节点。
  16. acl超级管理员
    zookeeper的权限管理模式有一种叫做super,该模式提供一个超管可以方便的访问 任何权限的节点。
    假设这个超管是:super:admin,需要先为超管生成密码的密文。
    echo -n super:admin | openssl dgst -binary -sha1 | openssl base64 那么打开zookeeper目录下的{zkhome}/bin/zkServer.sh服务器脚本文件,找到如下一行:
    nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \ "-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" 在原来的配置上加上一个超级管理员配置项,格式如下:
    "-Dzookeeper.DigestAuthenticationProvider.superDigest=<超管用户>:<超管密文密码>" 实操如下:
  17. zookeeper的权限设置 zookeeper权限控制_java_08


  18. zookeeper的权限设置 zookeeper权限控制_大数据_09

  19. 记住在/的前面添加,重启zookeeper让配置生效。
  20. zookeeper的权限设置 zookeeper权限控制_java_10

  21. 多种授权模式
    多种授权模式,用逗号分隔
  22. zookeeper的权限设置 zookeeper权限控制_大数据_11