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

[经验分享] zookeeper 权限概述

[复制链接]

尚未签到

发表于 2015-11-21 13:56:46 | 显示全部楼层 |阅读模式
  老样子,先上连接,第一个是淘宝综合业务平台的(前几个月还叫通用产品团队呢我记得)
  
  http://rdc.taobao.com/team/jm/archives/947,其实基本上需要的他这里都有了,只是……太专业了,什么都说了唯独没说要怎么用。另一个是http://ec2-23-21-252-232.compute-
  
  1.amazonaws.com/wordpress/?p=14,写的基本上也到位了,就是格式太差,看了半天看不到重点,所以今天再写一篇不完全自主知识产权的文章,稍微总结一下zookeeper中的权限管理。
  其实综合业务(每次都想打“通用产品”)的文章写的已经很具体了不过可以稍微总结一下:
  

  先来看下ACL的数据结构:
每一个znode节点上都可以设置一个访问控制列表,数据结构为List

ACL
+--perms int (allow What)
+--id Id
    +--scheme String (Who)
    +--id String      (How)
一个ACL对象就是一个Id和permission对,用来表示哪个/哪些范围的Id(Who)在通过了怎样的鉴权(How)

之后,就允许进行那些操作(What):Who How What;permission(What)就是一个int表示的位码,每一

位代表一个对应操作的允许状态。类似unix的文件权限,不同的是共有5种操作:CREATE、READ、WRITE、

DELETE、ADMIN(对应更改ACL的权限);Id由scheme(Who)和一个具体的字符串鉴权表达式id(How)构成,用

来描述哪个/哪些范围的Id应该怎样被鉴权。Scheme事实上是所使用的鉴权插件的标识。id的具体格式和语

义由scheme对应的鉴权实现决定。
  

  1、在zookeeperC的API里面,设置ACL的时候需要传入一个类型为structACL的结构指针,structACL结构类
  
  型的定义如下:
  structACL_vector {
  int32_t count;
  struct ACL *data;
  };
  可以看出,该结构包含两个字段:一个用于记录结构中ACL结构个数的,另一个应该是一个指向ACL结构数组
  
  的指针(数组长度就由count决定了),ACL结构的定义如下:
  struct ACL {
  int32_tperms;
  struct Idid;
  };
  这个结构也是两个字段:perms的意思就是permission,记录着权限,权限值从0到31说白了就是五个bit位
  
  分别记录五种权限,从高位到低位分别是admin、delete、create、write、read,简称adcwr,权限的具体
  
  含义不解释。另一个字段又是一个结构Id,(要处理这么样一个结构果断提防内存泄露)该结构的定义如下
  
  :
  struct Id {
  char *scheme;
  char * id;
  };
  到这里算是清楚了,里面两个字段:scheme标志着权限管理策略,目前有四个:world、auth、digest和ip
  
  ,具体不解释。Id字段是真正用来做权限匹配的,匹配成功就算你拥有权限。
  整个结构综合业务那边解释的很清楚了,就不在说了,只是把具体定义给大家看看,说白了,如果要设置权
  
  限,就要弄这么样一个结构出来,把需要的字段都填好,还要填对(比如如果scheme是“digest”的话,id
  
  必须具有“user:password”的格式)。
  2、可以设置节点权限的API主要有两个,一个是create,一个是setACL,前者是在创建的时候就设置了,后
  
  者是另行设置,直观上来讲,后者设置能不能成功那都是不一定的,因为起码你要有a权限的。其实,前者
  
  也不好说了,经典反例请看综合业务博客,不解释。
  3、每个节点在创建的时候肯定要设置一个权限的,最经常设置的就是ZOO_OPEN_ACL_UNSAFE,也就是说
  
  adcwr= 31、scheme = “world”、 id = “anyone”。简单地说:随便哪个家伙,想干什么都行。根据综
  
  合业务博客,在一个zookeeper session创建以后会为该session创建默认的Id,其中scheme= “ip”、 id
  
  就是客户端的IP地址,在访问节点的时候,zookeeper内部会将这个权限信息附加在消息中发送,消息在处
  
  理的时候会将消息中的Id信息与节点的ACL信息进行匹配,对于ZOO_OPEN_ACL_UNSAFE权限的节点,任何匹配
  
  都会是成功的。
  4、除了在session创建时默认构造的Id,客户还可以指定自己的权限,这需要用到zoo_add_auth函数,该函
  
  数就是用来重新声明自己的Id。比如,如果客户端要访问一个节点时发现权限不够,如果它知道节点的权限
  
  设置,它就可以重新设置自己的Id,并达到访问节点的目的。
  5、当scheme为“digest”的时候,id字段必须具有“user:password”的格式,当我们调用zoo_add_auth
  
  函数时,password代表的字符串会经过SHA1加密。而调用getACL函数时我们看到的password字段代表的字符
  
  串已经是加密后的字符串了。因此“digest”策略下,在调用setACL时,password部分的字符串必须是密文
  
  ,而调用zoo_add_auth函数password部分的字符串必须是明文。
  用最简单的话总结,创建节点的时候会分配权限和验证Id,用户可以通过zoo_add_auth函数设置自己的验证
  
  Id,同时用户可以通过setACL重设权限和验证Id,如果验证成功用户将拥有该节点赋予该验证Id的权限。
  

运维网声明 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-141852-1-1.html 上篇帖子: dubbo+zookeeper+spring的demo 下篇帖子: 【Apache Hadoop系列】Hadoop1.0.4+zookeeper3.5.4+hbase0.94.5分布式部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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