设为首页 收藏本站
查看: 1114|回复: 0

[经验分享] ZooKeeper ACL(Access Control List)访问控制列表

[复制链接]

尚未签到

发表于 2019-1-9 06:58:19 | 显示全部楼层 |阅读模式
  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种权限指对自身节点的操作权限
  身份的认证有4种方式:
  world:默认方式,相当于全世界都能访问
  auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
  digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
  ip:使用Ip地址认证
  Cli命令行下可以这样测试:
  通过getAcl命令可以发现,刚创建的节点,默认是 world,anyone的认证方式,具有cdrwa所有权限
  继续捣鼓:
  先给/test增加了user1:+owfoSBn/am19roBPzR1/MfCblE的只读(r)权限控制,
  说明:setAcl /test digest:用户名:密码:权限 给节点设置ACL访问权限时,密码必须是加密后的内容,这里的+owfoSBn/am19roBPzR1/MfCblE=,对应的原文是12345 (至于这个密文怎么得来的,后面会讲到,这里先不管这个),设置完Acl后,可以通过
  getAcl /节点路径 查看Acl设置
  然后get /test时,提示认证无效,说明访问控制起作用了,接下来:
  addauth digest user1:12345 给"上下文"增加了一个认证用户,即对应刚才setAcl的设置
  然后再 get /test 就能取到数据了
  最后 delete /test 成功了!原因是:根节点/默认是world:anyone:crdwa(即:全世界都能随便折腾),所以也就是说任何人,都能对根节点/进行读、写、创建子节点、管理acl、以及删除子节点(再次映证了ACL中的delete权限应该理解为对子节点的delete权限)
  刚才也提到了,setAcl /path digest这种方式,必须输入密码加密后的值,这在cli控制台上很不方便,所以下面这种方式更常用:
  注意加框的部分,先用addauth digest user1:12345 增加一个认证用户,然后用 setAcl /test auth:user1:12345:r 设置权限,跟刚才的效果一样,但是密码这里输入的是明文,控制台模式下手动输入更方便。
  好了,揭开加密规则:
  1
  2
  3
  4
  5
  6
  7

  static public String generateDigest(String>  throws NoSuchAlgorithmException {

  String parts[] =>  byte digest[] = MessageDigest.getInstance("SHA1").digest(
  idPassword.getBytes());
  return parts[0] + ":" + base64Encode(digest);
  }
  就是SHA1加密,然后base64编码  
  代码使用:
  zookeeper有一个很好用的客户端开源项目zkclient,官网地址为:http://github.com/zkclient ,其最新片0.7-dev已经支持ACL了(旧0.1版无此功能,所以推荐使用最新版),使用方法:
  git clone https://github.com/sgroschupf/zkclient (把代码拉到本地)
  修改
  build.gradle 找到92行
  uploadArchives {
  

repositories.mavenDeployer {  //repository(url: "file:///tmp/mavenRepo")
  repository(url: "http://172.21.129.56:8081/nexus/content/repositories/thirdparty/") {
  authentication(userName: admin, password: admin123)
  }
  beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
  pom.project {
  name 'ZkClient'
  packaging 'jar'
  description 'A zookeeper client, that makes life a little easier.'
  url 'https://github.com/sgroschupf/zkclient'
  licenses {
  license {
  name 'The Apache Software License, Version 2.0'
  url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
  distribution 'repo'
  }
  }
  scm {
  url 'https://github.com/sgroschupf/zkclient'
  connection 'scm:git:git://github.com/sgroschupf/zkclient.git'
  developerConnection 'scm:git:https://github.com/sgroschupf/zkclient.git'
  }
  developers {
  developer {
  id 'sgroschupf'
  name 'Stefan Groshupf'
  }
  developer {
  id 'pvoss'
  name 'Peter Voss'
  }
  developer {
  id 'jzillmann'
  name 'Johannes Zillmann'
  }
  }
  }
  
}
  

  }
  把这一段干掉,否则编译时会出错
  然后(windows环境,把./gradew 换成gradlew)
  ./gradlew test (测试)
  ./gradlew jars (编译生成jar包)
  ./gradlew install (安装到本机maven仓库)  
  新建一个maven项目,pom.xml参考下面设置:
  复制代码
  1
  2

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660908-1-1.html 上篇帖子: zookeeper 集群安装(单点与分布式成功安装) 下篇帖子: java企业架构 spring mvc +mybatis + KafKa+Flume+Zookeeper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表