Well when I am keeping the param to the following value we get an error.
<param>
> <name>main.ldapRealm.contextFactory</name>
> <value>$ldapContextFactory</value>
> </param>
>
>
Copying from the gateway.log. (It made me think we need to define the value
for ldapContextFactory)
2015-12-08 22:13:58,003 ERROR env.EnvironmentLoader
(EnvironmentLoader.java:initEnvironment(146)) - Shiro environment
initialization failed
org.apache.shiro.config.UnresolveableReferenceException: *The object with
id [ldapContextFactory] has not yet been defined and therefore cannot be
referenced. * Please ensure objects are defined in the order in which they
should be created and made available for future reference.
at
org.apache.shiro.config.ReflectionBuilder.getReferencedObject(ReflectionBuilder.java:224)
at
org.apache.shiro.config.ReflectionBuilder.resolveReference(ReflectionBuilder.java:239)
Regards,
DP
>
> On Tue, Dec 8, 2015 at 4:59 PM, Darpan Patel <[email protected]> wrote:
>
>> Thanks for the merged template. I made modifications to it and
>>
>> I am not sure what value should I fill for main.ldapRealm.contextFactory ?
>> We are running on windows 2008/2012 Active directory.
>>
>> <param>
>> <name>main.ldapRealm.contextFactory</name>
>> <value>$ldapContextFactory</value>
>> </param>
>>
>>
> I think that you leave it exactly like that.
> It is some sort of shiro injection thing - it references the value defined
> above it that way.
>
>
>> I removed this parameter and I see the in the logs:
>>
>> 2015-12-08 21:56:51,806 ERROR hadoop.gateway
>> (KnoxLdapRealm.java:getUserDn(574)) - Failed to get system ldap connection:
>> javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308:
>> LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e,
>> v1db1]
>>
>>
>> ( I am happy to see new error after 3 days phew!!!)
>>
>>
> Glad that you are happy but let's getting working and see how you feel. :)
> We'll also roll it into some better documentation for the AD specific
> usecase.
>
>
>> Regards,
>> DP
>>
>> On 8 December 2015 at 14:52, Darpan Patel <[email protected]> wrote:
>>
>>> Thanks Larray.
>>> I will check this and update you.
>>>
>>> Regards,
>>> DP
>>>
>>> On 8 December 2015 at 12:18, larry mccay <[email protected]> wrote:
>>>
>>>> Hi Darpan -
>>>>
>>>> The following topology is probably a better starting point for you AD
>>>> configuration - I've tried to merge yours with it as best I can:
>>>>
>>>> <gateway>
>>>> <provider>
>>>> <role>authentication</role>
>>>> <name>ShiroProvider</name>
>>>> <enabled>true</enabled>
>>>> <param>
>>>> <name>sessionTimeout</name>
>>>> <value>30</value>
>>>> </param>
>>>> <param>
>>>> <name>main.ldapRealm</name>
>>>>
>>>> <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm</value>
>>>> </param>
>>>>
>>>> <param>
>>>> <name>main.ldapContextFactory</name>
>>>>
>>>> <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory</value>
>>>> </param>
>>>>
>>>> <param>
>>>> <name>main.ldapRealm.contextFactory</name>
>>>> <value>$ldapContextFactory</value>
>>>> </param>
>>>> <param>
>>>> <name>main.ldapRealm.contextFactory.url</name>
>>>> <!-- ADJUST host, port for your AD setup-->
>>>> <value>ldap://IP_OF_WINDOWS_AD:389</value>
>>>> </param>
>>>> <!-- ignored due to use of
>>>> main.ldapRealm.userSearchAttributeName -->
>>>> <param>
>>>> <name>main.ldapRealm.userDnTemplate</name>
>>>> <value>cn={0},CN=users,DC=test,DC=com</value>
>>>> <!-- also tried following values -->
>>>> <value>uid={0},CN=users,DC=test,DC=com</value>
>>>> <value>cn={0},DC=test,DC=com</value>
>>>> </param>
>>>>
>>>> <!-- Param above is ignored sAMAccount is usually used for AD
>>>> -->
>>>> <param>
>>>> <name>main.ldapRealm.userSearchAttributeName</name>
>>>> <value>sAMAccountName</value>
>>>> </param>
>>>>
>>>> <!-- adjust as appropriate -->
>>>> <param>
>>>> <name>main.ldapRealm.userObjectClass</name>
>>>> <value>person</value>
>>>> </param>
>>>>
>>>> <!-- adjust the dn below to match your environment -->
>>>> <param>
>>>> <name>main.ldapRealm.contextFactory.systemUsername</name>
>>>> <value>cn={systemuser},ou=process,ou=accounts,dc=test,dc=com</value>
>>>> </param>
>>>>
>>>> <!-- should be moved to the credential store for the gateway to be more
>>>> secure -->
>>>> <param>
>>>> <name>main.ldapRealm.contextFactory.systemPassword</name>
>>>> <value>{systemuser_password}/value>
>>>> </param>
>>>>
>>>> <!-- let's disable for now since you have no authorization
>>>> policies defined anyway -->
>>>> <param>
>>>> <name>main.ldapRealm.authorizationEnabled</name>
>>>> <value>false</value>
>>>> </param>
>>>>
>>>> <param>
>>>> <name>main.ldapRealm.searchBase</name>
>>>> <value>cn=users,dc=test,dc=com</value>
>>>> </param>
>>>>
>>>> <param>
>>>>
>>>> <param>
>>>> <name>main.ldapRealm.memberAttributeValueTemplate</name>
>>>> <value>cn={0},cn=users,dc=test,dc=com</value>
>>>> <!-- also tried uid={0} -->
>>>> </param>
>>>>
>>>> <param>
>>>>
>>>> <name>main.ldapRealm.contextFactory.authenticationMechanism</name>
>>>> <value>simple</value>
>>>> </param>
>>>>
>>>> <param>
>>>> <name>urls./**</name>
>>>> <value>authcBasic</value>
>>>> </param>
>>>> </provider>
>>>>
>>>> <!-- the group principal mapping below is not likely what you
>>>> want
>>>> note that mapping of the hdfs group to admin. Also, we have
>>>> disabled authorization above so there is no need for
>>>> groups -->
>>>> <provider>
>>>> <role>identity-assertion</role>
>>>> <name>Default</name>
>>>> <enabled>true</enabled>
>>>> <!--param>
>>>> <name>group.principal.mapping</name>
>>>> <value>*=users;hdfs=admin</value>
>>>> </param-->
>>>> </provider>
>>>>
>>>> <provider>
>>>> <role>authorization</role>
>>>> <name>AclsAuthz</name>
>>>> <enabled>true</enabled>
>>>> </provider>
>>>>
>>>> </gateway>
>>>>
>>>> We need to better document the difference between LDAP and AD for such
>>>> deployments.
>>>>
>>>> I've also tried to document some of the changes that I made.
>>>> Note that you don't have any authorization ACLs defined in the
>>>> AclsAuthz provider so I disabled group lookup.
>>>> That will only add complexity to your config - we can re-enable once
>>>> authentication is working.
>>>>
>>>> Please go through this config and ensure that DNs, host and ports and
>>>> system usernames match your environment.
>>>>
>>>> Hope this helps.
>>>>
>>>> --larry
>>>>
>>>> On Tue, Dec 8, 2015 at 5:16 AM, Darpan Patel <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi All,
>>>>>
>>>>> For this blocker issue let more information if it can help fixing the
>>>>> authorization problem.
>>>>> Please let me know if more details required.
>>>>> (+ dev list)
>>>>>
>>>>> */etc/krb5.conf*
>>>>>
>>>>> [libdefaults]
>>>>> renew_lifetime = 7d
>>>>> forwardable = true
>>>>> default_realm = HORTONWORKS.COM
>>>>> ticket_lifetime = 24h
>>>>> dns_lookup_realm = false
>>>>> dns_lookup_kdc = false
>>>>> #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
>>>>> #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
>>>>>
>>>>> [domain_realm]
>>>>> .hortonworks.com = HORTONWORKS.COM
>>>>> HORTONWORKS.COm = HORTONWORKS.COM
>>>>>
>>>>> [logging]
>>>>> default = FILE:/var/log/krb5kdc.log
>>>>> admin_server = FILE:/var/log/kadmind.log
>>>>> kdc = FILE:/var/log/krb5kdc.log
>>>>>
>>>>> [realms]
>>>>> HORTONWORKS.COM = {
>>>>> admin_server = KDC_SERVER_HOST
>>>>> kdc = KDC_SERVER_HOST
>>>>> }
>>>>> *TEST.COM <http://TEST.COM>* = {
>>>>> admin_server = WINDOWS_12_SERVER_AD_HOST
>>>>> kdc = WINDOWS_12_SERVER_AD_HOST
>>>>> }
>>>>>
>>>>>
>>>>> */usr/hdp/current/knox-server/conf/gateway-site.xml*
>>>>>
>>>>> <configuration>
>>>>> <property>
>>>>> <name>*gateway.gateway.conf.dir*</name>
>>>>> <value>deployments</value>
>>>>> </property>
>>>>> <property>
>>>>> <name>*gateway.hadoop.kerberos.secured*</name>
>>>>> <value>true</value>
>>>>> </property>
>>>>> <property>
>>>>> <name>*gateway.path*</name>
>>>>> <value>gateway</value>
>>>>> </property>
>>>>> <property>
>>>>> <name>*gateway.port*</name>
>>>>> <value>8443</value>
>>>>> </property>
>>>>> <property>
>>>>> <name>*java.security.auth.login.config*</name>
>>>>> <value>/*etc/knox/conf/krb5JAASLogin.conf*</value>
>>>>> </property>
>>>>> <property>
>>>>> <name>*java.security.krb5.conf*</name>
>>>>> <value>*/etc/krb5.conf*</value>
>>>>> </property>
>>>>> <property>
>>>>> <name>sun.security.krb5.debug</name>
>>>>> <value>true</value>
>>>>> </property>
>>>>> </configuration>
>>>>>
>>>>>
>>>>> */etc/knox/conf/krb5JAASLogin.conf*
>>>>>
>>>>> com.sun.security.jgss.initiate {
>>>>> com.sun.security.auth.module.Krb5LoginModule required
>>>>> renewTGT=true
>>>>> doNotPrompt=true
>>>>> useKeyTab=true
>>>>> keyTab="/etc/security/keytabs/knox.service.keytab"
>>>>> principal="knox/[email protected]"
>>>>> isInitiator=true
>>>>> storeKey=true
>>>>> useTicketCache=true
>>>>> client=true;
>>>>> };
>>>>>
>>>>> Regards,
>>>>> DP
>>>>>
>>>>> ---------- Forwarded message ----------
>>>>> From: Darpan Patel <[email protected]>
>>>>> Date: 7 December 2015 at 17:59
>>>>> Subject: Need help setting up Knox for A/D integrated Kerberized
>>>>> Cluster
>>>>> To: [email protected]
>>>>>
>>>>>
>>>>> Hi All,
>>>>>
>>>>> I am stuck on an issue from last two days. I would be really grateful
>>>>> if someone can help on this.
>>>>>
>>>>> We have HDP 2.3 implemented over 8 node cluster and the same cluster
>>>>> has been Kerberized and later on we have integrated it with Active
>>>>> Directory (Which runs in the same VPN). We also verified that Windows 2012
>>>>> A/D integration with Ranger works fine for defining policies and audit
>>>>> log.
>>>>> But I am stuck at Knox bit. I am trying to replicate the same
>>>>> configuration
>>>>> properties which I have set for Ranger LDAP-AD Integration.
>>>>>
>>>>> I am taking reference of the Hortonworks documentation and also Apache
>>>>> Knox documentation.
>>>>>
>>>>> The A/D domain name is TEST.COM and all the users are under Users
>>>>>
>>>>> [image: Inline images 1]
>>>>>
>>>>>
>>>>> Under the Users we have few users one of the them is knox, darpan,
>>>>> test,etc.
>>>>>
>>>>> When we issue following command on the node on which Knox Server is
>>>>> running (topology name is default)
>>>>>
>>>>>
>>>>>
>>>>> *curl -iv -k -u [email protected]:#123Password -X GET
>>>>> "https://localhost:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS
>>>>> <https://localhost:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS>" OR*
>>>>>
>>>>> *curl -iv -k -u knox:#123Password -X GET
>>>>> "https://localhost:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS
>>>>> <https://localhost:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS>"*
>>>>>
>>>>>
>>>>> Every time I see < HTTP/1.1 401 Unauthorized HTTP/1.1 401
>>>>> Unauthorized on the console.
>>>>>
>>>>>
>>>>> Entries in the *gateway-audit.log *are like this :
>>>>>
>>>>> gateway-audit.log
>>>>> ==================
>>>>> 15/12/07 17:11:08
>>>>> ||38606993-17e2-4c3e-ad4b-e3faea293aae|audit|WEBHDFS||||access|uri|/gateway/default/webhdfs/v1/?op=LISTSTATUS|unavailable|
>>>>> 15/12/07 17:11:09
>>>>> ||38606993-17e2-4c3e-ad4b-e3faea293aae|audit|WEBHDFS||||authentication|
>>>>> *principal*|*[email protected] <[email protected]>*|failure|*LDAP
>>>>> authentication failed.*
>>>>> 15/12/07 17:11:09
>>>>> ||38606993-17e2-4c3e-ad4b-e3faea293aae|audit|WEBHDFS||||access|uri|/gateway/default/webhdfs/v1/?op=LISTSTATUS|success|Response
>>>>> status: 401
>>>>>
>>>>>
>>>>> 15/12/07 17:05:28
>>>>> ||5b436e43-b874-40f7-b111-7b262fe5125d|audit|WEBHDFS||||access|uri|/gateway/default/webhdfs/v1/?op=LISTSTATUS|unavailable|
>>>>> 15/12/07 17:05:29
>>>>> ||5b436e43-b874-40f7-b111-7b262fe5125d|audit|WEBHDFS||||authentication|
>>>>> *principal*|knox|failure|*LDAP authentication failed.*
>>>>> 15/12/07 17:05:29
>>>>> ||5b436e43-b874-40f7-b111-7b262fe5125d|audit|WEBHDFS||||access|uri|/gateway/default/webhdfs/v1/?op=LISTSTATUS|success|Response
>>>>> status: 401
>>>>>
>>>>>
>>>>> *Gateway.log*
>>>>> *===========*
>>>>> 2015-12-07 17:05:28,620 INFO hadoop.gateway
>>>>> (KnoxLdapRealm.java:getUserDn(550)) - Computed userDn:
>>>>> cn=knox,CN=users,DC=test,DC=com using dnTemplate for principal: knox
>>>>>
>>>>>
>>>>> Following is the part of our *default.xml *topology:
>>>>>
>>>>>
>>>>> <gateway>
>>>>> <provider>
>>>>> <role>authentication</role>
>>>>> <name>ShiroProvider</name>
>>>>> <enabled>true</enabled>
>>>>> <param>
>>>>> <name>sessionTimeout</name>
>>>>> <value>30</value>
>>>>> </param>
>>>>> <param>
>>>>> <name>*main.ldapRealm*</name>
>>>>>
>>>>> <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm</value>
>>>>> </param>
>>>>>
>>>>> <param>
>>>>> <name>*main.ldapContextFactory*</name>
>>>>>
>>>>> <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory</value>
>>>>> </param>
>>>>>
>>>>> <param>
>>>>> <name>*main.ldapRealm.userDnTemplate*</name>
>>>>> <value>cn={0},CN=users,DC=test,DC=com</value>
>>>>> <!-- also tried following values -->
>>>>> <value>uid={0},CN=users,DC=test,DC=com</value>
>>>>> <value>cn={0},DC=test,DC=com</value>
>>>>> </param>
>>>>> <param>
>>>>> <name>*main.ldapRealm.contextFactory.url*
>>>>> </name>
>>>>> <!-- IP Address of the WINDOSWS 2012 Acive
>>>>> Directory Server which works for Ranger -->
>>>>> <value>*ldap://IP_OF_WINDOWS_AD:389*</value>
>>>>> </param>
>>>>> <param>
>>>>> <name>*main.ldapRealm.authorizationEnabled*
>>>>> </name>
>>>>> <value>true</value>
>>>>> </param>
>>>>> <param>
>>>>> <name>*main.ldapRealm.searchBase*</name>
>>>>> <value>cn=users,dc=test,dc=com</value>
>>>>> </param>
>>>>> <param>
>>>>> <param>
>>>>> <name>
>>>>> *main.ldapRealm.memberAttributeValueTemplate*</name>
>>>>> <value>cn={0},cn=users,dc=test,dc=com</value>
>>>>> <!-- also tried uid={0} -->
>>>>> </param>
>>>>> <param>
>>>>> <name>
>>>>> *main.ldapRealm.contextFactory.authenticationMechanism<*/name>
>>>>> <value>simple</value>
>>>>> </param>
>>>>> <param>
>>>>> <name>urls./**</name>
>>>>> <value>authcBasic</value>
>>>>> </param>
>>>>> </provider>
>>>>>
>>>>> <provider>
>>>>> <role>*identity-assertion*</role>
>>>>> <name>Default</name>
>>>>> <enabled>true</enabled>
>>>>> <param>
>>>>> <name>*group.principal.mapping*</name>
>>>>> <value>*=users;hdfs=admin</value>
>>>>> </param>
>>>>> </provider>
>>>>>
>>>>> <provider>
>>>>> <role>*authorization*</role>
>>>>> <name>AclsAuthz</name>
>>>>> <enabled>true</enabled>
>>>>> </provider>
>>>>>
>>>>> </gateway>
>>>>>
>>>>>
>>>>> And following is the console output while trying to access webhdfs
>>>>> using curl
>>>>>
>>>>> curl -iv -k -u knox:#123Password -X GET "
>>>>> https://localhost:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS"
>>>>>
>>>>>
>>>>> *Console Output:*
>>>>> ----------------
>>>>>
>>>>> * About to connect() to localhost port 8443 (#0)
>>>>> * Trying ::1...
>>>>> * Connected to localhost (::1) port 8443 (#0)
>>>>> * Initializing NSS with certpath: sql:/etc/pki/nssdb
>>>>> * skipping SSL peer certificate verification
>>>>> * SSL connection using TLS_DHE_RSA_WITH_AES_128_CBC_SHA
>>>>> * Server certificate:
>>>>> * subject:
>>>>> CN=FQDN_OF_My_gateway_HOST,OU=Test,O=Hadoop,L=Test,ST=Test,C=US
>>>>> * start date: Nov 27 20:36:22 2015 GMT
>>>>> * expire date: Nov 26 20:36:22 2016 GMT
>>>>> * common name: FQDN_OF_My_gateway_HOST
>>>>> * issuer:
>>>>> CN=FQDN_OF_My_gateway_HOST,OU=Test,O=Hadoop,L=Test,ST=Test,C=US
>>>>> * Server auth using Basic with user 'knox'
>>>>> > GET /gateway/default/webhdfs/v1/?op=LISTSTATUS HTTP/1.1
>>>>> > Authorization: Basic a25veDojMTIzUGFzc3dvcmQ=
>>>>> > User-Agent: curl/7.29.0
>>>>> > Host: localhost:8443
>>>>> > Accept: */*
>>>>> >
>>>>> < HTTP/1.1 401 Unauthorized
>>>>> HTTP/1.1 401 Unauthorized
>>>>> * Authentication problem. Ignoring this.
>>>>> < WWW-Authenticate: BASIC realm="application"
>>>>> WWW-Authenticate: BASIC realm="application"
>>>>> < Content-Length: 0
>>>>> Content-Length: 0
>>>>> < Server: Jetty(8.1.14.v20131031)
>>>>> Server: Jetty(8.1.14.v20131031)
>>>>>
>>>>>
>>>>> Please let me know if any additional information is required.
>>>>>
>>>>> Thanks,
>>>>> DP
>>>>>
>>>>>
>>>>
>>>
>>
>