zeppelin集成openldap,以及admin用户设置

之前写过一篇文章集成FreeIPA,今天尝试集成OpenLdap,出现了一些问题,这里记录下配置过程
修改zeppelin-site.xml

<property>
  <name>zeppelin.anonymous.allowed</name>
  <value>false</value>
  <description>Anonymous user allowed by default</description>
</property>

配置shiro.ini

[main]
ldapRealm=org.apache.zeppelin.realm.LdapRealm
ldapRealm.contextFactory.authenticationMechanism=simple
ldapRealm.contextFactory.url=ldap://172.16.7.20:389
ldapRealm.userDnTemplate=uid={0},ou=people,dc=haohaozhu,dc=hadoop
ldapRealm.pagingSize = 200
ldapRealm.authorizationEnabled=true
ldapRealm.searchBase= dc=haohaozhu,dc=hadoop
ldapRealm.userSearchBase = ou=people,dc=haohaozhu,dc=hadoop
ldapRealm.groupSearchBase = ou=group,dc=haohaozhu,dc=hadoop
ldapRealm.groupObjectClass= posixGroup
ldapRealm.userLowerCase = true
ldapRealm.userSearchScope = subtree;
ldapRealm.groupSearchScope = subtree;
ldapRealm.contextFactory.systemUsername= cn=root,dc=haohaozhu,dc=hadoop
ldapRealm.contextFactory.systemPassword= 123456
ldapRealm.groupSearchEnableMatchingRuleInChain = true
ldapRealm.rolesByGroup = zeppelinadmin: admin

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = JSESSIONID
cookie.httpOnly = true
sessionManager.sessionIdCookie = $cookie

securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 86400000
shiro.loginUrl = /api/login

[roles]
role1 = *
role2 = *
role3 = *
admin = *

[urls]
/api/version = anon
/api/interpreter/setting/restart/** = authc
/api/interpreter/** = authc, roles[admin]
/api/configurations/** = authc, roles[admin]
/api/credential/** = authc, roles[admin]
#/** = anon
/** = authc

这里特别注意一个参数:ldapRealm.rolesByGroup = zeppelinadmin: admin
zeppelinadmin是ldap中的组,admin是zeppelin中管理员角色,意思是zeppelinadmin组中的所有ldap用户都是管理员;zeppelinadmin的ldif如下

dn: cn=zeppelinadmin,ou=group,dc=haohaozhu,dc=hadoop
objectClass: posixGroup
objectClass: top
cn: zeppelinadmin
gidNumber: 10099
memberUid: james

我们可以看到,这个组中包含james用户,即管理员,james用户的ldif

dn: uid=james,ou=people,dc=haohaozhu,dc=hadoop
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
cn: james
gidNumber: 10012
homeDirectory: /home/james
sn: james
uid: james
uidNumber: 72590
givenName: james
loginShell: /bin/bash
mail: james@haohaozhu.com
userPassword:: e1NIQX1UWVkrRTVBQXVpRFFZaHdySzJHb25QRXJvL2c9

如果真这么简单就好了,按照如上配置完,启动后james用户,无法进入创建Interpreter页面,也就是没有admin权限,查看日志

{"status":"OK","message":"","body":{"principal":"james","ticket":"34a77015-7898-4f83-8704-ccdc9df7fd00","roles":"[]"}}

从日志可以看出roles为空,ldap组和zeppelin role没有映射成功;无奈网上资料特别少,所以索性看了下zeppelin ldap这部分代码,发现zeppelin去ldap中拉取组信息时使用的检索表达式:

(&(objectClass=posixGroup)(member:1.2.840.113556.1.4.1941:=uid=james))

因为ldap组中使用memberUid保存用户的uid,所以这个表达式是无法检索到组信息,也就无法完成group和role的绑定,所以改动如下org.apache.zeppelin.realm.LdapRealm

第一处:
private static final String MATCHING_RULE_IN_CHAIN_FORMAT =
          "(&(objectClass=%s)(%s))";

第二处(rolesFor方法内):
searchResultEnum = ldapCtx.search(
                getGroupSearchBase(),
                    String.format(
                            MATCHING_RULE_IN_CHAIN_FORMAT, groupObjectClass, userDn.replace("uid","memberUid")),
                searchControls);

重新打包:

 mvn clean package -pl zeppelin-server -DskipTests
 cp zeppelin-server/target/zeppelin-server-0.8.1.jar  $ZEPPELIN_HOME/lib/

重启:

./bin/zeppelin-daemon.sh restar

james用户已经可以进入Interpreter创建页面了
在这里插入图片描述

end

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在 Zeppelin 的 web 页面中创建 Hive 的集成环境,你需要进行以下配置: 1. 打开 Zeppelin 的 web 页面,并登录到你的账户。 2. 在页面右上角的菜单中,点击 "Interpreter"(解释器)选项。 3. 在解释器页面中,找到并点击 "Create"(创建)按钮,开始创建一个新的解释器。 4. 在 "Interpreter Setting"(解释器设置)页面,配置以下属性: - **Name**(名称):为解释器设置一个唯一的名称,比如 "hive"。 - **Interpreter Group**(解释器组):选择一个适当的解释器组,比如 "hive"。 - **Dependencies**(依赖项):添加 Hive 所需的依赖项。你可以点击 "Add Dependency"(添加依赖项)按钮,然后输入依赖项的坐标(如 groupId、artifactId 和 version)。 - **Properties**(属性):配置 Hive 的相关属性。你可以点击 "Add Property"(添加属性)按钮,然后输入属性的名称和值。 以下是一些常用的 Hive 属性配置示例: - `hive.execution.engine`: 设置 Hive 的执行引擎,比如 `tez`、`mr` 等。 - `hive.metastore.uris`: 指定 Hive 元数据存储的地址。 - `hive.server2.url`: 指定 HiveServer2 的地址。 5. 配置完成后,点击 "Save"(保存)按钮以保存你的配置。 现在,你已经成功配置了 Hive 的集成环境。在 Zeppelin 中使用 Hive 解释器时,你可以创建新的笔记本或编辑已有的笔记本,并选择 "hive" 解释器来执行 Hive 相关的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值