网站目录管理模板,需要推广的app在哪里找,合肥房产交易网,全国认可企业信息查询平台ZooKeeper基于ACL的访问控制
ZooKeeper 用ACL控制对znode的访问#xff0c;类似UNIX文件权限#xff0c;但无znode所有者概念#xff0c;ACL指定ID及对应权限#xff0c;且仅作用于特定znode#xff0c;不递归。
ZooKeeper支持可插拔认证方案#xff0c;ID格式为scheme…ZooKeeper基于ACL的访问控制
ZooKeeper 用ACL控制对znode的访问类似UNIX文件权限但无znode所有者概念ACL指定ID及对应权限且仅作用于特定znode不递归。
ZooKeeper支持可插拔认证方案ID格式为scheme:expression。客户端认证时其对应ID与连接关联访问znode时与ACL比对。
ACL权限
CREATE可创建子节点。READ可获取节点数据和列出子节点。WRITE可设置节点数据。DELETE可删除子节点。ADMIN可设置权限。
CREATE和DELETE从WRITE分离实现细粒度控制ADMIN类似所有者权限所有人隐式有LOOKUP权限可查看节点状态。获取znode的ACL需READ或ADMIN权限无ADMIN权限时digest哈希值会被屏蔽。
内置ACL方案
worldID为anyone代表任何人。auth特殊方案忽略expression用当前用户认证信息无认证用户时设ACL会失败。digest用username:password生成MD5哈希作ACL ID标识认证时明文发送username:password 。ip用客户端主机IP作ACL ID标识表达式为addr/bits。x509用客户端X500主体作ACL ID标识安全端口下客户端自动认证并设x509认证信息。
ZooKeeper C客户端API
C库提供权限常量如ZOO_PERM_READ等和标准ACL ID如ZOO_ANYONE_ID_UNSAFE等还有三个标准ACL如ZOO_OPEN_ACL_UNSAFE完全开放。相关操作有
zoo_add_auth用于客户端向服务器认证可多次调用。zoo_create创建新节点需父节点有CREATE权限。zoo_get_acl获取节点ACL信息需READ或ADMIN权限。zoo_set_acl替换节点ACL列表需节点有ADMIN权限。
并给出使用“foo”方案认证并创建仅具创建权限临时节点的示例代码。
可插拔的ZooKeeper身份验证
ZooKeeper有可插拔身份验证框架涉及客户端认证和在ACL中找对应条目两个操作。身份验证插件需实现特定接口
public interface AuthenticationProvider {String getScheme();KeeperException.Code handleAuthentication(ServerCnxn cnxn, byte authData[]);boolean isValid(String id);boolean matches(String id, String aclExpr);boolean isAuthenticated();
}getScheme返回插件标识字符串。handleAuthentication处理客户端认证信息。isValid验证ID格式。matches匹配客户端认证信息和ACL条目。isAuthenticated确定认证信息是否加入ACL。
内置ip和digest插件可通过系统属性添加插件服务器启动时查找zookeeper.authProvider.开头的属性并解析为插件类名所有服务器插件定义需一致。
3.6.0版本提供另一抽象
public abstract class ServerAuthenticationProvider implements AuthenticationProvider {public abstract KeeperException.Code handleAuthentication(ServerObjs serverObjs, byte authData[]);public abstract boolean matches(ServerObjs serverObjs, MatchValues matchValues);
}扩展该类可接收额外参数ServerObjs和MatchValues 涉及ZooKeeperServer实例、当前连接、操作路径、操作值及setAcl()时设置的ACL列表等信息。