张坤的个人博客

  • 首页
  • 分类
  • 标签
  • 日志

  • 搜索
Jenkins RabbitMQ Zookeeper IDEA Logstash Kibana ELK NIO Netty Spring Cloud Golang DataX Elasticsearch React Native Mysql H2 Socket Spring Boot Kafka Mybatis Sqlmap Vue Postgresql Docker Vert.x Flutter Flink Redis

Zookeeper权限模型

发表于 2020-06-29 | 分类于 Zookeeper | 0 | 阅读次数 34

Zookeeper的权限模型是访问控制列表(Access Control List),简称ACL

权限格式

scheme:id:permission

  • scheme:采取什么方式授权

    方案描述
    world所有用户都是这个权限,id必须为anyone
    ip只有指定的IP才有这个权限
    auth使用已添加认证的用户认证
    digest使用"用户名:密码"方式认证
  • id:授权对象,如果scheme是ip,那么id就是ip地址。如果是auth,id就是用户,多个对象用 , 分隔

  • permission:授予哪些权限,有5个。create(新增)、delete(删除)、read(查询)、writer(修改)、admin(修改权限),这5中权限可以分别简写成cdrwa。

    权限ACL简写描述
    createc可以创建子结点,create
    deleted可以删除子结点,delete、deleteall。就算没有删除权限也可以删除当前节点
    readr可以读取节点数据及子节点列表,get、ls
    writew可以修改结点数据,set
    admina可以修改结点访问控制权限列表,setAcl。不设置但是可以查看权限,getAcl

虽然父节点被设置了权限,但是创建的子节点默认权限是 world:anyone:cdrwa

权限操作

zookeeper可以通过 setAcl,getAcl 命令来获取或设置节点的权限

  • setAcl [-s] [-v dataVersion] [-R] path data:设置权限
  • getAcl [-s] path:查看权限
  • addauth scheme auth:添加用户

World授权

用命令 create 创建的节点默认就是 world:anyone 模式的,并且拥有所有权限

IP授权

比如下面这条命令只允许 192.168.133.133 这个地址对 /aclnode 节点有删除、查询、修改、修改权限的权限。

setAcl /aclnode ip:192.168.133.133:drwa
# 也可以同时对多个ip地址授权,用 , 分隔
setAcl /aclnode ip:192.168.133.133,192.168.133.134:drwa

Auth授权模式

先添加一个用户,用户名是root,密码是123

addauth digest root:123

创建一个节点,scheme是auth,/aclnode 就只允许root这个用户操作啦

create /aclnode gg auth:root:cdwra
# 或者通过setAcl授权
setAcl /aclnode auth:root:cdwra

查看acl

image20200629114124626.png

在zk1的docker容器中可以对 /aclnode 节点任意操作,因为之前已经用 addauth 命令登录了

image20200629114336044.png

退出连接后重新连接,发现未验证,需要重新登录

image20200629114435758.png

登录后,又可以操作啦

image20200629114500816.png

Digest授权模式

和Auth授权模式的区别是,Digest需要加上用户加密后的密码

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

加密后的密码可以通过下面这条命令获取

echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64

user和password是加密前的密码,举个例子:

echo -n root:123 | openssl dgst -binary -sha1 | openssl base64
# 输出:dqFD4/T6OaSbifsDlGaqTwLweYE=

dqFD4/T6OaSbifsDlGaqTwLweYE= 就是root用户加密后的密码

多模式授权

可以对一个节点同时用多个模式进行授权

setAcl /aclnode ip:192.168.133.132:cdrwa,auth:root:cdrwa,digest:bbj:673OfZhUE8JEFMcu0l64qI8e5ek=:cdrwa

允许 192.168.133.132 这个地址、root和bbj用户有所有权限

Acl超级管理员

  1. 假设这个超管的账号密码是 supper:admin

  2. 获取到这个密码的密文

    echo -n super:admin | openssl dgst -binary -sha1 | openssl base64
    # xQJmxLMiHGwaqBvst5y6rkB6HQs=
    
  3. 在 zkServer.sh 这个脚本 nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" 后面加上 "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="。如:

    nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="
    
  4. 重启ZK服务,用超管帐号登录

    addauth digest super:admin
    

    就可以用这个账号为所欲为了

# Jenkins # RabbitMQ # Zookeeper # IDEA # Logstash # Kibana # ELK # NIO # Netty # Spring Cloud # Golang # DataX # Elasticsearch # React Native # Mysql # H2 # Socket # Spring Boot # Kafka # Mybatis # Sqlmap # Vue # Postgresql # Docker # Vert.x # Flutter # Flink # Redis
Zookeeper基本操作
Java Api操作Zookeeper
  • 文章目录
  • 站点概览
会Coding的猴子

会Coding的猴子

57 日志
19 分类
28 标签
RSS
Github
Creative Commons
© 2021 会Coding的猴子
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4

湘ICP备18011740号