You need to use one of them either users block or LDAP/AD. On Wed, 31 Oct 2018 at 9:39 Eyal Hashai <eyal.has...@kenshoo.com> wrote:
> > When I try to allow both LDAP auth mechanism and uncomment [users] to add > a specific user I get this except and zeppelin won't start: > > > TRACE [2018-10-31 07:34:10,137] ({main} ThreadContext.java[get]:126) - > get() - in thread [main] > WARN [2018-10-31 07:34:10,138] ({main} ContextHandler.java[log]:2062) - > unavailable > MultiException stack 1 of 1 > java.lang.Exception: IniRealm/password based auth mechanisms should be > exclusive. Consider removing [users] block from shiro.ini > at > org.apache.zeppelin.server.ZeppelinServer.<init>(ZeppelinServer.java:112) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:423) > at > org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1375) > at org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:1083) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:978) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1082) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1074) > at > org.glassfish.jersey.inject.hk2.AbstractHk2InjectionManager.createAndInitialize(AbstractHk2InjectionManager.java:213) > at > org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager.createAndInitialize(ImmediateHk2InjectionManager.java:54) > at > org.glassfish.jersey.server.ApplicationConfigurator.createApplication(ApplicationConfigurator.java:138) > at > org.glassfish.jersey.server.ApplicationConfigurator.init(ApplicationConfigurator.java:96) > at > org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$0(ApplicationHandler.java:313) > at java.util.Arrays$ArrayList.forEach(Arrays.java:3880) > at > org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:313) > at > org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:282) > at > org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:335) > at > org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178) > at > org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370) > at javax.servlet.GenericServlet.init(GenericServlet.java:244) > at > org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:616) > at > org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:396) > at > org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871) > at > org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298) > at > org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349) > at > org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342) > at > org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) > at > org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) > at > org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) > at > org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:163) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) > at org.eclipse.jetty.server.Server.start(Server.java:387) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) > at > org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) > at org.eclipse.jetty.server.Server.doStart(Server.java:354) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at > org.apache.zeppelin.server.ZeppelinServer.main(ZeppelinServer.java:215) > DEBUG [2018-10-31 07:34:10,139] ({main} > ServletHandler.java[initialize]:875) - EXCEPTION > javax.servlet.ServletException: rest@355bd4 > ==org.glassfish.jersey.servlet.ServletContainer,-1,false > at > org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:637) > at > org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:396) > at > org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871) > at > org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298) > at > org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349) > at > org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342) > at > org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) > at > org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) > at > org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) > at > org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:163) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) > at org.eclipse.jetty.server.Server.start(Server.java:387) > at > org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) > at > org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) > at org.eclipse.jetty.server.Server.doStart(Server.java:354) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at > org.apache.zeppelin.server.ZeppelinServer.main(ZeppelinServer.java:215) > Caused by: A MultiException has 1 exceptions. They are: > 1. java.lang.Exception: IniRealm/password based auth mechanisms should be > exclusive. Consider removing [users] block from shiro.ini > > at org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:1085) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:978) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1082) > at > org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1074) > at > org.glassfish.jersey.inject.hk2.AbstractHk2InjectionManager.createAndInitialize(AbstractHk2InjectionManager.java:213) > at > org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager.createAndInitialize(ImmediateHk2InjectionManager.java:54) > at > org.glassfish.jersey.server.ApplicationConfigurator.createApplication(ApplicationConfigurator.java:138) > at > org.glassfish.jersey.server.ApplicationConfigurator.init(ApplicationConfigurator.java:96) > at > org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$0(ApplicationHandler.java:313) > at java.util.Arrays$ArrayList.forEach(Arrays.java:3880) > at > org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:313) > at > org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:282) > at > org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:335) > at > org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178) > at > org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370) > at javax.servlet.GenericServlet.init(GenericServlet.java:244) > at > org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:616) > ... 20 more > > > On Mon, Oct 29, 2018 at 11:15 PM Fawze Abujaber <fawz...@gmail.com> wrote: > >> Hi Eyal, >> >> I think using the LDAP or AD you can do the map between group and role >> while using the users section allowing you to assign a user with a role and >> in the urls section you can provide this role with specific permissions. >> Are you trying to allow some users to be able to trigger restart and >> change conf while other not? >> Using the users and url sections can provide you with this functionality. >> >> [users] >> eyal = eyal, admin >> fawze= fawze, member >> >> eyal has a role called admin and fawze is a member >> >> [urls] >> /api/interpreter/** = authc, roles[admin] >> /api/configurations/** = authc, roles[admin] >> /api/credential/** = authc, roles[admin] >> >> Only user with admin role can access the mentioned apis, if you would >> like allowing the users with member role to have an access to the apis then >> you need to add this in the urls. >> >> I'm not sure if this is what you are looking for .... >> >> Please monitor the queries that triggered through zeppelin and check if >> they are are passing user name to impala so you can monitor these queries >> through Cloudera manager ... >> >> On Mon, Oct 29, 2018 at 3:11 PM Eyal Hashai <eyal.has...@kenshoo.com> >> wrote: >> >>> >>> Dear Fawze, >>> Thanks for taking the time to reply! >>> Unfortunately this solution did not work.. can you explain how it assign >>> roles to a group? >>> I wouldn't mind having a manually inserted user (e.g. admin\admin) but >>> Zeppelin doesn't seem to start if you have both LDAP and [user] configured. >>> >>> Thank you. >>> >>> >>> >>> On Mon, Oct 29, 2018 at 12:36 PM Fawze Abujaber <fawz...@gmail.com> >>> wrote: >>> >>>> Hi Eyal, >>>> >>>> I think this should be your seachbase: >>>> >>>> ldapRealm.groupSearchBase = "OU=OpenstackGroups,DC=kenshooprd,DC=local" >>>> >>>> >>>> and you should comment >>>> ldapRealm.rolesByGroup = bigdata: admin >>>> >>>> On Mon, Oct 29, 2018 at 12:21 PM Eyal Hashai <eyal.has...@kenshoo.com> >>>> wrote: >>>> >>>>> >>>>> Hello, >>>>> I've connected my Zeppelin server via LDAP for user authentication. >>>>> This works fine for auth, the problem is that I can't figure how roles >>>>> are attached to a user, I need to set "bigdata" group as admins, >>>>> Over the past week I have tried many different configurations and >>>>> searched online for a solution without success. >>>>> >>>>> Does anyone have experience with this? >>>>> Any information or link would be highly appreciated! >>>>> >>>>> Thank you >>>>> >>>>> *shiro.ini:* >>>>> >>>>> ### A sample for configuring LDAP Directory Realm >>>>> ldapRealm = org.apache.zeppelin.realm.LdapRealm >>>>> ldapRealm.contextFactory.url = ldap://1.2.3.4:389 >>>>> ldapRealm.userDnTemplate = {0}@kenshooprd.local >>>>> ldapRealm.contextFactory.authenticationMechanism = simple >>>>> ldapRealm.contextFactory.systemUsername = "ldap@kenshooprd.local" >>>>> ldapRealm.contextFactory.systemPassword = XXXXXXX >>>>> ldapRealm.authorizationEnabled = true >>>>> ldapRealm.rolesByGroup = >>>>> "CN=bigdata,OU=OpenstackGroups,DC=kenshooprd,DC=local":"admin" >>>>> ldapRealm.rolesByGroup = bigdata: admin >>>>> ldapRealm.groupSearchBase = >>>>> "CN=bigdata,OU=OpenstackGroups,DC=kenshooprd,DC=local":"admin" >>>>> securityManager.realms = $ldapRealm >>>>> ldapRealm.groupSearchEnableMatchingRuleInChain = true >>>>> >>>>> >>>>> *Logs:* >>>>> >>>>> TRACE [2018-10-29 09:45:40,171] ({qtp1418428263-15 - /api/login} >>>>> ThreadContext.java[get]:126) - get() - in thread [qtp1418428263-15 - >>>>> /api/login] >>>>> TRACE [2018-10-29 09:45:40,171] ({qtp1418428263-15 - /api/login} >>>>> ThreadContext.java[get]:133) - Retrieved value of type >>>>> [org.apache.shiro.web.subject.support.WebDelegatingSubject] for key >>>>> [org.apache.shiro.util.ThreadContext_SUBJECT_KEY] >>>>> bound to thread [qtp1418428263-15 - /api/login] >>>>> TRACE [2018-10-29 09:45:40,171] ({qtp1418428263-15 - /api/login} >>>>> DelegatingSubject.java[getSession]:317) - attempting to get session; >>>>> create >>>>> = false; session is null = false; session has id = true >>>>> TRACE [2018-10-29 09:45:40,172] ({qtp1418428263-15 - /api/login} >>>>> AbstractValidatingSessionManager.java[doGetSession]:116) - Attempting to >>>>> retrieve session with key >>>>> org.apache.shiro.web.session.mgt.WebSessionKey@2573f425 >>>>> WARN [2018-10-29 09:45:40,175] ({qtp1418428263-15 - /api/login} >>>>> LoginRestApi.java[postLogin]:206) - >>>>> {"status":"OK","message":"","body":{"principal":"eyalh","ticket":"217d1409-f078-4424-bf8b-ccbef561d817", >>>>> "roles":"[]"}} >>>>> DEBUG [2018-10-29 09:45:40,177] ({qtp1418428263-15 - /api/login} >>>>> HttpConnection.java[process]:657) - >>>>> org.eclipse.jetty.server.HttpConnection$SendCallback@1e3b792a[PROCESSING][i=ResponseInfo{HTTP/1.1 >>>>> 200 OK,118,false},cb=org.eclipse.jetty >>>>> .server.HttpChannel$CommitCallback@1eabc124] generate: NEED_HEADER >>>>> (null,[p=0,l=118,c=8192,r=118],true)@START >>>>> DEBUG [2018-10-29 09:45:40,327] ({qtp1418428263-12} >>>>> Parser.java[parse]:257) - SERVER Parsed Frame: >>>>> TEXT[len=109,fin=true,rsv=...,masked=true] >>>>> >>>>> DEBUG [2018-10-29 09:45:40,327] ({qtp1418428263-12} >>>>> Parser.java[notifyFrame]:186) - SERVER Notify >>>>> ExtensionStack[queueSize=0,extensions=[],incoming=org.eclipse.jetty.websocket.common.WebSocketSession,outgoing=org.eclipse.jetty.websocket.server.WebSocketServerConnection] >>>>> DEBUG [2018-10-29 09:45:40,327] ({qtp1418428263-12} >>>>> AbstractEventDriver.java[incomingFrame]:103) - >>>>> incomingFrame(TEXT[len=109,fin=true,rsv=...,masked=true]) >>>>> DEBUG [2018-10-29 09:45:40,327] ({qtp1418428263-12} >>>>> NotebookServer.java[onMessage]:160) - RECEIVE << LIST_CONFIGURATIONS, >>>>> RECEIVE PRINCIPAL << eyalh, RECEIVE TICKET << >>>>> 217d1409-f078-4424-bf8b-ccbef561d817, *RECEIVE ROLES << []*, RECEIVE >>>>> DATA << null >>>>> TRACE [2018-10-29 09:45:40,328] ({qtp1418428263-12} >>>>> NotebookServer.java[onMessage]:167) - RECEIVE MSG = Message{data=null, >>>>> op=LIST_CONFIGURATIONS} >>>>> DEBUG [2018-10-29 09:45:40,335] ({qtp1418428263-12} >>>>> WebSocketRemoteEndpoint.java[sendString]:385) - sendString with >>>>> HeapByteBuffer@5710df12[p=0,l=6199,c=6199,r=6199]={<<<{\n "op": >>>>> "CONFIG... "roles": ""\n}>>>} >>>>> DEBUG [2018-10-29 09:45:40,337] ({qtp1418428263-12} >>>>> ExtensionStack.java[outgoingFrame]:288) - Queuing >>>>> TEXT[len=6199,fin=true,rsv=...,masked=false] >>>>> >>>>> >>>>> *LDAP settings for user:* >>>>> >>>>> [root@ecstgbhdp02-zeppelin conf]# ldapsearch -x -LLL -h 1.2.3.4 -D >>>>> ldap@kenshooprd.local -w xxxxx -b >>>>> "CN=bigdata,OU=OpenstackGroups,DC=kenshooprd,DC=local" >>>>> dn: CN=bigdata,OU=OpenstackGroups,DC=kenshooprd,DC=local >>>>> objectClass: top >>>>> objectClass: group >>>>> cn: bigdata >>>>> member: CN=Eyal Hashai,CN=Users,DC=kenshooprd,DC=local >>>>> distinguishedName: CN=bigdata,OU=OpenstackGroups,DC=kenshooprd,DC=local >>>>> instanceType: 4 >>>>> whenCreated: 20161129171457.0Z >>>>> whenChanged: 20181004121722.0Z >>>>> uSNCreated: 93111898 >>>>> uSNChanged: 276782631 >>>>> name: bigdata >>>>> objectGUID:: bBMye2mox0+hDkddqds1+g== >>>>> objectSid:: AQUAAAAAAAUVAAAAMtw+IXjVu14XG9q7IEEAAA== >>>>> sAMAccountName: bigdata >>>>> sAMAccountType: 268435456 >>>>> groupType: -2147483646 >>>>> objectCategory: >>>>> CN=Group,CN=Schema,CN=Configuration,DC=kenshooprd,DC=local >>>>> dSCorePropagationData: 20170723142935.0Z >>>>> dSCorePropagationData: 20170723142620.0Z >>>>> dSCorePropagationData: 16010101000417.0Z >>>>> >>>>> >>>>> >>>>> -- >>>>> >>>>> >>>>> *[ Eyal Hashai ]* >>>>> Database Administrator - Big Data Team // *Kenshoo* >>>>> *Office* +972 (3) 746-6500 x552 // *Mobile* +972 (50) 404-0473* >>>>> <eyal.has...@kenshoo.com>* >>>>> *eyal.has...@kenshoo.com <eyal.has...@kenshoo.com>* >>>>> <eyal.has...@kenshoo.com>* <eyal.has...@kenshoo.com>* >>>>> _______________________________________ >>>>> *www.Kenshoo.com* <http://kenshoo.com/> >>>>> >>>>> * <eyal.has...@kenshoo.com>* >>>>> <http://kenshoo.com/> >>>>> >>>>> This e-mail, as well as any attached document, may contain material >>>>> which is confidential and privileged and may include trademark, copyright >>>>> and other intellectual property rights that are proprietary to Kenshoo >>>>> Ltd, >>>>> its subsidiaries or affiliates ("Kenshoo"). This e-mail and its >>>>> attachments may be read, copied and used only by the addressee for the >>>>> purpose(s) for which it was disclosed herein. If you have received it in >>>>> error, please destroy the message and any attachment, and contact us >>>>> immediately. If you are not the intended recipient, be aware that any >>>>> review, reliance, disclosure, copying, distribution or use of the contents >>>>> of this message without Kenshoo's express permission is strictly >>>>> prohibited. >>>> >>>> >>>> >>>> -- >>>> Take Care >>>> Fawze Abujaber >>>> >>> >>> >>> -- >>> >>> >>> *[ Eyal Hashai ]* >>> Database Administrator - Big Data Team // *Kenshoo* >>> *Office* +972 (3) 746-6500 x552 // *Mobile* +972 (50) 404-0473* >>> <eyal.has...@kenshoo.com>* >>> *eyal.has...@kenshoo.com <eyal.has...@kenshoo.com>* >>> <eyal.has...@kenshoo.com>* <eyal.has...@kenshoo.com>* >>> _______________________________________ >>> *www.Kenshoo.com* <http://kenshoo.com/> >>> >>> * <eyal.has...@kenshoo.com>* >>> <http://kenshoo.com/> >>> >>> This e-mail, as well as any attached document, may contain material >>> which is confidential and privileged and may include trademark, copyright >>> and other intellectual property rights that are proprietary to Kenshoo Ltd, >>> its subsidiaries or affiliates ("Kenshoo"). This e-mail and its >>> attachments may be read, copied and used only by the addressee for the >>> purpose(s) for which it was disclosed herein. If you have received it in >>> error, please destroy the message and any attachment, and contact us >>> immediately. If you are not the intended recipient, be aware that any >>> review, reliance, disclosure, copying, distribution or use of the contents >>> of this message without Kenshoo's express permission is strictly prohibited. >> >> >> >> -- >> Take Care >> Fawze Abujaber >> > > > -- > > > *[ Eyal Hashai ]* > Database Administrator - Big Data Team // *Kenshoo* > *Office* +972 (3) 746-6500 x552 // *Mobile* +972 (50) 404-0473* > <eyal.has...@kenshoo.com>* > *eyal.has...@kenshoo.com <eyal.has...@kenshoo.com>* > <eyal.has...@kenshoo.com>* <eyal.has...@kenshoo.com>* > _______________________________________ > *www.Kenshoo.com* <http://kenshoo.com/> > > * <eyal.has...@kenshoo.com>* > <http://kenshoo.com/> > > This e-mail, as well as any attached document, may contain material which > is confidential and privileged and may include trademark, copyright and > other intellectual property rights that are proprietary to Kenshoo Ltd, > its subsidiaries or affiliates ("Kenshoo"). This e-mail and its > attachments may be read, copied and used only by the addressee for the > purpose(s) for which it was disclosed herein. If you have received it in > error, please destroy the message and any attachment, and contact us > immediately. If you are not the intended recipient, be aware that any > review, reliance, disclosure, copying, distribution or use of the contents > of this message without Kenshoo's express permission is strictly prohibited. -- Take Care Fawze Abujaber