Zookeeper ACL权限配置及zkclient示例

zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl

ZK的节点有5种操作权限:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

权限

描述

setAcl中的简写

write

能够设置znode的值

w

read

能够读取znode的值和列出它的children znode

r

create

能够创建children znode

c

delete

能够删除children znode

d

admin

能够执行setAcl即设置访问控制列表

a

all

所有权限

wrcda

身份的认证有4种方式:

world:默认方式,相当于全世界都能访问

auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)

digest:即用户名:密码这种方式认证,这也是业务系统中最常用的

ip:使用Ip地址认证

设置访问控制:

启动zookper后,使用zkCli进行操作

zkCli.cmd -server 127.0.0.1:2181

方式一:(推荐)

1)增加一个认证用户

addauth digest 用户名:密码明文

eg. 

addauth digest user1:password1

2)设置权限

setAcl /path auth:用户名:密码明文:权限

eg. 

setAcl /test auth:user1:password1:cdrwa

3)查看Acl设置

getAcl /path

方式二:

setAcl /path digest:用户名:密码密文:权限

注:这里的加密规则是SHA1加密,然后base64编码。

	public static void main(String[] args) throws NoSuchAlgorithmException {
		System.out.println(generateDigest("admin:12345"));;
	}
	
	static public String generateDigest(String idPassword)
	        throws NoSuchAlgorithmException {
	    String parts[] = idPassword.split(":", 2);
	    byte digest[] = MessageDigest.getInstance("SHA1").digest(
	            idPassword.getBytes());
	    return parts[0] + ":" + org.apache.commons.codec.binary.Base64.encodeBase64String(digest);
	}

zkclient是zookeeper客户端的一种实现,支持ACL权限传输并访问zookeeper节点。

maven依赖:

<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.6</version>
</dependency>

zkclient增加ACL权限:

       public ZkClient createACLClient(URL url) {
		ZkClient client = new ZkClient(url.getBackupAddress());

		/**
		 * 增加Zookeeper的ACL控制选项
		 */
		if (!StringUtils.isEmpty(url.getUsername()) && !StringUtils.isEmpty(url.getPassword())) {
			StringBuffer auth = new StringBuffer(url.getUsername())
					.append(":").append(url.getPassword());
			client.addAuthInfo("digest", auth.toString().getBytes());
		}

		return client;
	}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏熊二哥

快速入门系列--WCF--07传输安全、授权与审核

这部分主要涉及企业级应用的安全问题,一般来说安全框架主要提供3个典型的安全行为:认证、授权和审核。除了典型的安全问题,对于一个以消息作为通信手段的分布式应用,还...

1919
来自专栏云计算教程系列

如何在CentOS 7上安装和配置ownCloud

ownCloud是一个文件共享服务器,允许您将个人内容(如文档和图片)集中存储在此位置,就像Dropbox一样。与ownCloud的不同之处在于它是免费的开源软...

8300
来自专栏令仔很忙

WCF入门(一)--Request Entity Too large 传输的数据量过大

      通过WCF进行数据的查询或者添加的时候,如果数据量过大,一般会报出如下的错误:

1192
来自专栏Laoqi's Linux运维专列

linux安全配置

今天清早登录服务器发现很多暴力狗(使用ssh端口破解登录密码),真不知道这些人有啥意思,破解了无非是把我的服务器当作肉鸡再去攻击其他服务器,目的无非就是证明你有...

4635
来自专栏雪胖纸的玩蛇日常

django 通过ajax完成邮箱用户注册、激活账号

4567
来自专栏云计算教程系列

如何在Ubuntu 14.04上将解析应用程序迁移到解析服务器

Parse是一个移动后端即服务平台,自2013年起由Facebook拥有。2016年1月,Parse宣布其托管服务将于2017年1月28日完全关闭。

490
来自专栏散尽浮华

Nginx反向代理中使用proxy_redirect重定向url

在使用Nginx做反向代理功能时,有时会出现重定向的url不是我们想要的url,这时候就可以使用proxy_redirect进行url重定向设置了。proxy_...

2.8K5
来自专栏Albert陈凯

2018-10-11 Java 分布式应用追踪系统 skywalking (APM(应用性能监控)系统)Document

SkyWalking: 针对分布式系统的APM(应用性能监控)系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, M...

2932
来自专栏cmazxiaoma的架构师之路

MyEclipse使用Git进行Push to Upstream报错 学习笔记

962
来自专栏JarvanMo的IT专栏

Flutter https证书问题

转载请标明原文出处。 最近在开发Fluwx,在调试微信支付的时候,遇到了一个异常:

5332

扫码关注云+社区

领取腾讯云代金券