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

[经验分享] ZooKeeper权限管理机制

[复制链接]

尚未签到

发表于 2015-9-6 14:02:31 | 显示全部楼层 |阅读模式
一、ZooKeeper权限管理机制介绍
  本节将简要介绍ZooKeeper ACL 权限管理的几种方式。ZooKeeper 的权限管理亦即ACL 控制功能,通过Server、Client 两端协调完成:

1.1 Server端
  一个ZooKeeper 的节点(znode)存储两部分内容:数据和状态,状态中包含ACL信息。创建一个znode 会产生一个ACL 列表。
  (1)列表中每个ACL 包括:
  ①权限:perms
  ②验证模式:scheme
  ③具体内容:Ids
  (2)ZooKeeper 提供了如下几种验证模式:
  ①Digest:Client端由用户名和密码验证,譬如user:pwd
  ②Host:Client端由主机名验证,譬如localhost
  ③Ip:Client端由IP地址验证,譬如172.2.0.0/24
  ④World:固定用户为anyone,为所有Client端开放权限
  (3)权限许可集合如下,注意的是,exists操作和getAcl操作并不受ACL许可控制,因此任何客户端可以查询节点的状态和节点的ACL。
  ①Create:允许对子节点Create 操作
  ②Read:允许对本节点GetChildren 和GetData 操作
  ③Write :允许对本节点SetData 操作
  ④Delete :允许对子节点Delete 操作
  ⑤Admin :允许对本节点setAcl 操作
  (4)Znode ACL 权限用一个int 型数字perms 表示,perms 的5 个二进制位分别表示:
  setacl、delete、create、write、read。

例如
  ① adcwr=0x1f
  ② ----r=0x1
  ③ a-c-r=0x15

1.2 Client端
  Client 通过调用addAuthInfo()函数设置当前会话的Author信息(针对Digest 验证模式)。Server 收到Client 发送的操作请求(除exists、getAcl 之外),需要进行ACL 验证:对该请求携带的Author 明文信息加密,并与目标节点的ACL 信息进行比较,如果匹配则具有相
  应的权限,否则请求被Server 拒绝。

二、 ZooKeeper使用接口介绍(C API)
  基于上一节的内容,本节介绍Digest 验证模式下,通过用户名、密码的方式进行节点权限管理需要的相关接口。

2.1 设置节点权限
  Znode 存储ACL 的内容为密文,所以在setAcl 时必须将明文的用户名、密码(user:pwd)加密,结果为:
  EYJny+H3eleOv6O/G6jy9vuSCq8=(28 位),其加密方式为SHA1。使用方式如下:



//ACL参数设置
char szUserPwd[] = "user:pwd";
char szEncUserPwd[32];
char szDigestIds[64] = {0};
//EncryptSHA1()为SHA1加密函数
EncryptSHA1(szUserPwd, strlen((char*) szUserPwd), szEncUserPwd,sizeof(szEncUserPwd));
snprintf(szDigestIds,sizeof(szDigestIds),"user:%s", szEncUserPwd);
struct ACL stMyACL[]={{0x1f,{"digest",szDigestIds}},{0x01, {"world","anyone"}}};
struct ACL_vector vecMyACL = {2, stMyACL};
//设置ACL到Node
zoo_set_acl(zk, pszPath, -1, &vecMyACL);
2.2 用户验证方式
  在Client 连接ZooKeeper Server 之后,用如下的接口设置session 的用户信息:zoo_add_auth(zk, "digest", "user:pwd", 8, 0, 0);
  设置author 信息之后,该session 的每次操作都带有该author 标识。如果想用不同的author 信息操作,只需再调用一次zoo_add_auth ,Client 端以最后一次设置的信息为有效author 信息。

三、 ZooKeeper SuperDigest

3.1  Client 对znode 操作验证ACL 的方式
  (1)遍历znode的所有ACL:
  对于每一个ACL,首先操作类型与权限(perms)匹配。
  只有匹配权限成功才进行session 的auth 信息与ACL 的用户名、密码匹配
  (2)如果两次匹配都成功,则允许操作;否则,返回权限不够error(rc=-102)

3.2 特殊情况
  如果znode ACL List 中任何一个ACL 都没有setAcl 权限,那么就算superDigest 也修改不了它的权限;再假如这个znode 还不开放delete 权限,那么它的所有子节点都将不会被删除。唯一的办法是通过手动删除snapshot 和log 的方法,将ZK 回滚到一个以前的状态,然后重启,当然这会影响到该znode 以外其它节点的正常应用。

3.3 superDigest 设置的步骤
  (1)启动ZK 的时候加入参数
  "-Dzookeeper .DigestAuthenticationProvider.superDigest=super:D/InIHSb7yEEbrWz8b9l71RjZJU="(中间没有空格)。
  (2) 在客户端使用的时候, zoo_add_auth(zh, "digest", "super:test", 10, 0, 0); " super:test" 为
  "super:D/InIHSb7yEEbrWz8b9l71RjZJU="的明文表示,加密算法同setAcl。

运维网声明 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-110192-1-1.html 上篇帖子: [转载]Zookeeper开源客户端框架Curator简介 下篇帖子: 设置zookeeper jvm内存
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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