权限acl介绍,acl的构成与id

acl是Access control lists 的缩写,也就是权限控制列表:

针对节点可以设置相关读写等权限,目的是为了保障数据安全性

权限permissions可以指定不同的权限范围以及角色

acl的构成:

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

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

id:代表允许访问的用户

permissions:权限组合字符串

acl的构成-scheme,scheme有以下几种类型:

world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是 world:anyone:[permissions]

ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.77.130:[permissions]

auth:代表认证登录,需要注册用户获取权限后才可以登录访问,形式为 auth:userpassword:[permissions]

digest:需要对密码加密才能访问,组合形式为:digest:username:BASE64(SHA1(password)):[permissions]

auth与digest的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录。setAcl /path auth:lee:lee:cdrwa 与 setAcl /path digest:lee:BASE64(SHA1(password)):cdrwa是等价的,在通过 addauth digest lee:lee 后都能操作指定节点的权限。在实际情况中,digest要更为常用一些。

super:代表超级管理员,拥有所有的权限

acl的构成-permissions:

权限字符串缩写 crdwa :

CREATE:创建子节点权限

READ:访问节点/子节点权限

WRITE:设置节点数据权限

DELETE:删除子节点权限

ADMIN:管理员权限

acl命令:

getAcl 获取某个节点的acl权限信息

setAcl 设置某个节点的acl权限信息

addauth 输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密后的形式存在的

acl命令行world

使用 getAcl 命令获取某个节点的acl权限信息,示例:

[root@study-01 ~]# zkCli.sh

[zk: localhost:2181(CONNECTED) 5] create /testDir/testAcl test-data # 创建一个子节点

Created /testDir/testAcl

[zk: localhost:2181(CONNECTED) 6] getAcl /testDir/testAcl # 获取该节点的acl权限信息

'world,'anyone # 默认为world

: cdrwa

[zk: localhost:2181(CONNECTED) 7]

使用 setAcl 命令设置某个节点的acl权限信息,示例:

[zk: localhost:2181(CONNECTED) 7] setAcl /testDir/testAcl world:anyone:crwa # 设置该节点的acl权限

cZxid = 0x26

ctime = Mon Apr 23 17:28:30 CST 2018

mZxid = 0x26

mtime = Mon Apr 23 17:28:30 CST 2018

pZxid = 0x26

cversion = 0

dataVersion = 0

aclVersion = 1

ephemeralOwner = 0x0

dataLength = 9

numChildren = 0

[zk: localhost:2181(CONNECTED) 8] getAcl /testDir/testAcl

'world,'anyone

: crwa # 设置成功后,该节点就少了d权限

[zk: localhost:2181(CONNECTED) 9] create /testDir/testAcl/xyz xyz-data # 创建子节点

Created /testDir/testAcl/xyz

[zk: localhost:2181(CONNECTED) 10] delete /testDir/testAcl/xyz # 删除该子节点

Authentication is not valid : /testDir/testAcl/xyz # 由于没有d权限,所以提示无法删除

[zk: localhost:2181(CONNECTED) 11]

设置其他的权限也是如此,在此就不做演示了。

acl命令行auth

使用auth来设置权限的时候,需要在zk里注册一个用户才可以。示例:

[zk: localhost:2181(CONNECTED) 11] addauth digest user1:123456 # 需要先添加一个用户

[zk: localhost:2181(CONNECTED) 12] setAcl /testDir/testAcl auth:user1:123456:crwa # 然后才可以拿着这个用户去设置权限

cZxid = 0x26

ctime = Mon Apr 23 17:28:30 CST 2018

mZxid = 0x26

mtime = Mon Apr 23 17:28:30 CST 2018

pZxid = 0x28

cversion = 1

dataVersion = 0

aclVersion = 2

ephemeralOwner = 0x0

dataLength = 9

numChildren = 1

[zk: localhost:2181(CONNECTED) 14] getAcl /testDir/testAcl

'digest,'user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s= # 密码是以密文的形式存储的

: crwa

[zk: localhost:2181(CONNECTED) 15]

如果设置了权限后,再次进行设置,就可以不用加上用户名和密码了。而且就算是使用其他用户进行设置,也只会根据第一次设置的用户来进行配置:

[zk: localhost:2181(CONNECTED) 16] setAcl /testDir/testAcl auth::crw

[zk: localhost:2181(CONNECTED) 16] setAcl /testDir/testAcl auth:test:test:crw

[zk: localhost:2181(CONNECTED) 14] getAcl /testDir/testAcl

'digest,'user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s= # 依旧是第一次设置的用户

: crwa

[zk: localhost:2181(CONNECTED) 15]

acl命令行digest

由于之前使用auth做实验的时候已经登录了用户 ,所以在使用digest做实验前,需要先退出一下客户端,再重新连接,这样之前登录的用户就会自动退出。退出用户后才能使用digest设置权限,示例:

[zk: localhost:2181(CONNECTED) 5] create /names/testDigest digest-data # 创建子节点

Created /names/testDigest

[zk: localhost:2181(CONNECTED) 6] addauth digest user1:123456 # 添加用户

[zk: localhost:2181(CONNECTED) 8] getAcl /names/testDigest

'world,'anyone

: cdrwa

[zk: localhost:2181(CONNECTED) 3] setAcl /names/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa # 使用digest来设置权限

cZxid = 0x3a

ctime = Mon Apr 23 20:40:11 CST 2018

mZxid = 0x3a

mtime = Mon Apr 23 20:40:11 CST 2018

pZxid = 0x3a

cversion = 0

dataVersion = 0

aclVersion = 1

ephemeralOwner = 0x0

dataLength = 11

numChildren = 0

[zk: localhost:2181(CONNECTED) 11] getAcl /names/testDigest

'digest,'user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=

: crwa

[zk: localhost:2181(CONNECTED) 12]

可以看到,digest和auth除了一个使用明文一个使用密文之外,其他都是一致的,所以它俩的区别就只是密文和明文的区别。在线上环境中,一般使用digest比较多,因为密文安全一些。

acl命令行ip

这种方式和限制ip是一样的,就是设置只允许某一个ip有权限操作。示例:

[zk: localhost:2181(CONNECTED) 1] create /names/testip ip-data 创建子节点

Created /names/testip

[zk: localhost:2181(CONNECTED) 2] getAcl /names/testip

'world,'anyone

: cdrwa

[zk: localhost:2181(CONNECTED) 4] setAcl /names/testip ip:192.168.190.129:cdrwa # 使用ip来设置权限

cZxid = 0x46

ctime = Mon Apr 23 20:55:43 CST 2018

mZxid = 0x46

mtime = Mon Apr 23 20:55:43 CST 2018

pZxid = 0x46

cversion = 0

dataVersion = 0

aclVersion = 1

ephemeralOwner = 0x0

dataLength = 7

numChildren = 0

[zk: localhost:2181(CONNECTED) 5] getAcl /names/testip

'ip,'192.168.190.129 # 只允许这个ip拥有该节点的cdrwa权限

: cdrwa

[zk: localhost:2181(CONNECTED) 6] get /names/testip

ip-data

cZxid = 0x46

ctime = Mon Apr 23 20:55:43 CST 2018

mZxid = 0x46

mtime = Mon Apr 23 20:55:43 CST 2018

pZxid = 0x46

cversion = 0

dataVersion = 0

aclVersion = 1

ephemeralOwner = 0x0

dataLength = 7

numChildren = 0

[zk: localhost:2181(CONNECTED) 6]

acl命令行super超级管理员

基本所有的系统都会拥有一个超级管理员用户,zk也不例外。当我们给一些节点设置了权限,但是却发现设置错误了,导致节点无法正常访问,那么这时候普通用户是无法解决这种问题的,只能使用超级管理员用户来重新设置权限或删除节点。所以本节简单演示一下,如何配置管理员用户:

1.修改 zkServer.sh 增加super管理员:

[root@study-01 ~]# cd /usr/local/zookeeper-3.4.11/bin/

[root@study-01 /usr/local/zookeeper-3.4.11/bin]# vim zkServer.sh # 找到nohup那一行,加入以下内容

"-Dzookeeper.DigestAuthenticationProvider.superDigest=user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s="

[root@study-01 /usr/local/zookeeper-3.4.11/bin]#

注:user1是用户名,后面那一大串是加密后的密文密码

如下图:

2.修改完之后,需要重启zookeeper服务才能生效 :

[root@study-01 /usr/local/zookeeper-3.4.11/bin]# ./zkServer.sh restart

使用超级管理员用户:

[root@study-01 ~]# zkCli.sh

[zk: localhost:2181(CONNECTED) 9] ls /names/ip # ls一个无权限的节点

Authentication is not valid : /names/ip # 可以看到,权限不够

[zk: localhost:2181(CONNECTED) 10] addauth digest user1:123456 # 登录超级管理员用户,这里登录用的是明文密码

[zk: localhost:2181(CONNECTED) 11] ls /names/ip # 然后再次ls

[] # 这次就可以ls到了

[zk: localhost:2181(CONNECTED) 12] get /names/ip # 也可以get信息

ip-data

cZxid = 0x51

ctime = Mon Apr 23 21:02:42 CST 2018

mZxid = 0x51

mtime = Mon Apr 23 21:02:42 CST 2018

pZxid = 0x51

cversion = 0

dataVersion = 0

aclVersion = 1

ephemeralOwner = 0x0

dataLength = 7

numChildren = 0

[zk: localhost:2181(CONNECTED) 13] delete /names/testip # 删除节点也可以

[zk: localhost:2181(CONNECTED) 14]

acl的常用使用场景

开发/测试环境分离,开发者无权操作测试库的节点,只能读取

生产环境上控制指定ip的服务可以访问相关的节点,防止混乱

zk四字命令

zk四字命令 Four Letter Words:

zk可以通过它自身提供的简写命令来和服务器进行交互

需要使用到nc命令,安装命令:yum install nc

命令格式:echo [commond] | nc [ip] [port]

官方文档地址如下:

简单介绍一些常用的zk四字命令:

1.[stat] 查看zk的状态信息,以及是否mode。示例:

[root@study-01 ~]# echo stat |nc 192.168.190.129 2181

Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT

Clients:

/192.168.190.129:34268[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/4

Received: 117

Sent: 116

Connections: 1

Outstanding: 0

Zxid: 0x58

Mode: standalone

Node count: 16

[root@study-01 ~]#

2.[ruok] 查看当前zkserver是否启动,已启动的话就会返回imok。示例:

[root@study-01 ~]# echo ruok |nc 192.168.190.129 2181

imok

[root@study-01 ~]#

3.[dump] 列出未经处理的会话和临时节点。示例:

[root@study-01 ~]# echo dump |nc 192.168.190.129 2181

SessionTracker dump:

Session Sets (0):

ephemeral nodes dump:

Sessions with Ephemerals (0):

[root@study-01 ~]#

4.[conf] 查看服务器配置。示例:

[root@study-01 ~]# echo conf |nc 192.168.190.129 2181

clientPort=2181

dataDir=/usr/local/zookeeper-3.4.11/dataDir/version-2

dataLogDir=/usr/local/zookeeper-3.4.11/dataLogDir/version-2

tickTime=2000

maxClientCnxns=60

minSessionTimeout=4000

maxSessionTimeout=40000

serverId=0

[root@study-01 ~]#

5.[cons] 展示连接到服务器的客户端信息。示例:

[root@study-01 ~]# echo cons |nc 192.168.190.129 2181

/127.0.0.1:41152[1](queued=0,recved=2,sent=2,sid=0x10001004ed60001,lop=PING,est=1524493375316,to=30000,lcxid=0x0,lzxid=0x59,lresp=19999999,llat=0,minlat=0,avglat=1,maxlat=2)

/192.168.190.129:34277[0](queued=0,recved=1,sent=0)

[root@study-01 ~]#

6.[envi] 查看环境变量。示例:

[root@study-01 ~]# echo envi |nc 192.168.190.129 2181

Environment:

zookeeper.version=3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT

host.name=localhost

java.version=1.8.0_161

java.vendor=Oracle Corporation

java.home=/usr/local/jdk1.8/jre

java.class.path=/usr/local/zookeeper-3.4.11/bin/../build/classes:/usr/local/zookeeper-3.4.11/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/usr/local/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../conf:

java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

java.io.tmpdir=/tmp

java.compiler=

os.name=Linux

os.arch=amd64

os.version=3.10.0-327.el7.x86_64

user.name=root

user.home=/root

user.dir=/usr/local/zookeeper-3.4.11/bin

[root@study-01 ~]#

7.[mntr] 监控zk健康信息。示例:

[root@study-01 ~]# echo mntr |nc 192.168.190.129 2181

zk_version 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT

zk_avg_latency 0

zk_max_latency 4

zk_min_latency 0

zk_packets_received 169

zk_packets_sent 168

zk_num_alive_connections 2

zk_outstanding_requests 0

zk_server_state standalone

zk_znode_count 16

zk_watch_count 0

zk_ephemerals_count 0

zk_approximate_data_size 305

zk_open_file_descriptor_count 31

zk_max_file_descriptor_count 4096

[root@study-01 ~]#

8.[wchs] 展示watch的信息。示例:

[root@study-01 ~]# echo wchs |nc 192.168.190.129 2181

1 connections watching 1 paths

Total watches:1

[root@study-01 ~]#

9.[wchc] 展示session与watch信息。在3.4.10之后的版本中,wchc和wchp不再是白名单列表里的命令,需要使用这两个命令的话,得进行一个配置。示例:

[root@study-01 ~]# echo wchc |nc 192.168.190.129 2181

wchc is not executed because it is not in the whitelist. # 可以看到,提示这是不在白名单列表里的命令

[root@study-01 ~]# cd /usr/local/zookeeper-3.4.11/conf/

[root@study-01 /usr/local/zookeeper-3.4.11/conf]# vim zoo.cfg # 在文件末尾添加如下内容

4lw.commands.whitelist=*

[root@study-01 /usr/local/zookeeper-3.4.11/conf]# cd

[root@study-01 ~]# zkServer.sh restart # 重启zk服务

[root@study-01 ~]# echo wchc |nc 192.168.190.129 2181 # 这时就可以使用了

0x10001004ed60001

/names

[root@study-01 ~]#

10.[wchp] 展示watch与path信息。示例:

[root@study-01 ~]# echo wchp |nc 192.168.190.129 2181

/names

0x10001004ed60001

[root@study-01 ~]#

zookeeper的acl权限控制_zookeeper权限acl与四字命令相关推荐

  1. zookeeper的acl权限控制_Zookeeper 权限控制 ACL介绍

    zookeeper 的 ACL(Access Control List,访问控制表)权限在生产环境是特别重要的.ACL 权限可以针对节点设置相关读写等权限,保障数据安全性.permissions 可以 ...

  2. Zookeeper四字命令

    zookeeper 支持某些特定的四字命令与其交互,用户获取 zookeeper 服务的当前状态及相关信息,用户在客户端可以通过 telenet 或者 nc(netcat) 向 zookeeper 提 ...

  3. hive表级权限控制_Hive权限控制和超级管理员的实现

    Hive权限控制 Hive权限机制: Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 先决条件: 为了使用Hi ...

  4. 小知识:软件开发的权限控制和权限验证

    在软件开发中,经常会用到账号体系,涉及到账号体系的话就不可避免的会用到权限控制或者叫权限管理. 有时候,权限控制与权限验证很容易搞混,很多人以为在前端页面隐藏了某个按钮就控制好权限了,其实用户可以直接 ...

  5. Zookeeper的四字命令

    一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...

  6. zookeeper工具书 - (zkCli常用命令 + 四字命令)

    文章目录 一.ZkCli常用命令 zkCli.sh help addauth close 关闭当前客户端/会话(Close this client/session) connect host:port ...

  7. zookeeper命令行(zkCli.shzkServer.sh)使用及四字命令

    zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh). 还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认 ...

  8. zookeeper 四字命令的使用

    Linux中的命令NetCat有"瑞士军刀"的美誉.我们可以通过nc命令查看Zookeeper的一行属性数据.在Zookeeper中有很多四字命令,汇总如下: 序号 使用命令 输出 ...

  9. 开启 Zookeeper 四字命令(is not executed because it is not in the whitelist)

    有时候我们需要使用四字命令查看 ZK 的一些信息,如果没有配置开启,救会出现这样的异常: ➜ bin echo mntr | nc localhost 2181 mntr is not execute ...

最新文章

  1. Nginx 常用配置清单
  2. protobuf + maven 爬坑记
  3. dom定位的三种元素
  4. 【win PE】磁盘分区大小的重新调整 (再也不用担心C盘过小了)
  5. Nginx 安装配置【必须把文件到放到机器上】
  6. numpy统计分布显示
  7. windows如何使用ssh登录ubuntu
  8. tomcat在linux下开机启动
  9. jquery ajax xml attribute,获得jQuery ajax和asp.net webmethod xml响应工作
  10. 非现场执法管理计算机(工业级),浅析非现场执法中存在问题的方法及对策
  11. gan怎么输入一维数据_GAN评价指标最全汇总
  12. 如何在 Ubuntu 14.04 里面配置 chroot 环境
  13. SSD物体检测(附源代码,可以直接运行)
  14. 微计算机最常用的输入法,输入无极限 最常用五款拼音输入法横评
  15. python统计代码行数_使用Python简单快速实现统计代码行数
  16. 【AD封装】TF(micro SD)卡座封装大全(带3D)
  17. 无码间串扰的基带传输特性
  18. 某企业通达OA任意登录漏洞复现
  19. 函数Str、 Cstr 、 Val 、 Format联系与区别
  20. Macbook pro M1使用免费的方法读写NTFS的折腾之路

热门文章

  1. 大数据项目实战数仓4——常用脚本
  2. 大数据BI系统如何做数据采集
  3. r语言 append_Python爬取近十年TIOBE编程语言热度数据并可视化可视化
  4. 学习笔记︱深度学习以及R中并行算法的应用(GPU)
  5. 一起来读you don't know javascript(一)
  6. Drools 文档(目录)
  7. [Lydsy1805月赛]对称数 BZOJ5361
  8. CISCO路由器NTP服务器配置
  9. python2.7初学(〇)
  10. 数据结构学习(1):单链表