概述
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 | 添加认证用户 |
权限实操
- world授权模式
- 只演示删除权限,其他权限自行实操。
- ip授权模式
准备两台机器(可以使用克隆),比如我的一台机器192.168.64.129连接自己本地的zookeeper服务,另外一台机器192.168.64.132连接192.168.64.129服务。 - auth授权模式
使用auth授权模式,先添加认证用户,命令格式:addauth digest <user>:<password>
- quit命令,退出当前会话,并使用
./zkCli.sh
重新连接客户端。 重新认证的密码要和设置权限明文密码一样,即使不一样也不会报错,只是没有节点相应操作而已。
- digest授权模式
digest授权需要将密文加密后,用密文进行授权,明文加密成密文命令格式如下:echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
auth模式和digest模式本质都一样的,只是前者用明文赋予权限,后者用密文赋予权限。前者先认证后授权,后者先授权后认证,所以auth授权后仍然能访问节点,后者授权后需要重新认证后才能访问节点。
- 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=<超管用户>:<超管密文密码>"
实操如下: - 记住在
/
的前面添加,重启zookeeper让配置生效。 - 多种授权模式
多种授权模式,用逗号分隔