HI Larry,
Thanks for quick response. the value of contextFactory I missed somehow..
Now I don't see the contextFactory undefined error but .... When I try to
curl the default gateway for webhdfs still I am seeing the same console.
I tried issuing the following curl command with valid TGT in the cache and
after kdestroy and removing the TGT for both I am seeing the same output.
curl -iv -k -u [email protected]:#123Password -X GET "
https://gateway:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS"
also tried
curl -iv -k -X GET "
https://gateway:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS"
I am attaching the default gateway topology file with the email to avoid
lot of texts.
In the *gateway.log *I don't see any entry while hitting the curl
In the *gateway-audit *I see following :
15/12/09 13:44:47
||d96572dd-a988-4392-b7c8-fcf7e1d154f7|audit|WEBHDFS||||access|uri|/gateway/default/webhdfs/v1/?op=LISTSTATUS|unavailable|
15/12/09 13:44:48
||d96572dd-a988-4392-b7c8-fcf7e1d154f7|audit|WEBHDFS||||access|uri|/gateway/default/webhdfs/v1/?op=LISTSTATUS|success|Response
status: 401
I am not sure what I am missing!!!
*Thank you very much for the help.*
Regards,
DP
*Console Output:*
[root@gateway knox-server]# curl -iv -k -u [email protected]:KnoxPassword@123
-X GET "https://gateway:8443/gateway/default/webhdfs/v1/?op=LISTSTATUS"
* About to connect() to gateway port 8443 (#0)
* Trying 192.168.197.8...
* Connected to gateway (192.168.197.8) 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 '[email protected]'
> GET /gateway/default/webhdfs/v1/?op=LISTSTATUS HTTP/1.1
> Authorization: Basic a25veEB0ZXN0LmNvbTojMTIzUGFzc3dvcmQ=
> User-Agent: curl/7.29.0
> Host: gateway: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)
<
* Connection #0 to host gateway left intact
On 9 December 2015 at 13:24, larry mccay <[email protected]> wrote:
> I meant the version of the topology that I sent you.
> Note the order of the following to config items:
>
> <param>
> <name>main.ldapContextFactory</name>
>
> <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory</value>
> </param>
>
> <param>
> <name>main.ldapRealm.contextFactory</name>
> <value>$ldapContextFactory</value>
> </param>
>
> Do you have them in that order in the topology that you are using?
>
> On Wed, Dec 9, 2015 at 8:06 AM, Darpan Patel <[email protected]> wrote:
>
>> When we keep :
>>
>> <param>
>> <name>main.ldapRealm.contextFactory</name>
>> <value>$ldapContextFactory</value>
>> </param>
>>
>> in the log I see that the context Factory object is not defined
>> previously and hence could not be referred. Any idea for AD 2008/2012
>> Windows Server what should be the value?
>>
>> I am knox : 0.6.0.2 version.
>>
>> 2015-12-09 12:39:45,185 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.
>>
>> Many thanks,
>> DP
>>
>>
>>
>> On 9 December 2015 at 07:58, Darpan Patel <[email protected]> wrote:
>>
>>> Hi Larry,
>>>
>>> I am using the version : 0.6.0.2.3.0.0-2557 of Knox .
>>>
>>>
>>> Checked through curl -u admin:admin-password -i -k
>>> https://localhost:8443/gateway/admin/api/v1/version
>>>
>>>
>>>
>>>
>>> On 8 December 2015 at 23:42, larry mccay <[email protected]> wrote:
>>>
>>>> In the version that I sent you the main.ldapContextFactory is set
>>>> before this entry.
>>>> Is that true in the version that you are using?
>>>>
>>>> On Tue, Dec 8, 2015 at 5:16 PM, Darpan Patel <[email protected]>
>>>> wrote:
>>>>
>>>>> 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
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
<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.contextFactory</name>
<value>$ldapContextFactory</value>
</param>
<param>
<name>main.ldapRealm.contextFactory.url</name>
<value>ldap://AD_HOST:389</value>
<!-- Active Directory Host IP -->
</param>
<param>
<name>main.ldapRealm.userSearchAttributeName</name>
<value>sAMAccountName</value>
</param>
<param>
<name>main.ldapRealm.userObjectClass</name>
<value>person</value>
</param>
<!-- Not sure if the CN is correct. I've a user named "Knox Knox" id [email protected] in the AD -->
<!-- Tried with cn=knox,ou=accounts,dc=test,dc=com did not work -->
<!-- Also tried with cn=knox,cn=Users,dc=test,dc=com did not work -->
<param>
<name>main.ldapRealm.contextFactory.systemUsername</name>
<value>CN=Knox Knox,CN=Users,DC=test,DC=com</value>
</param>
<param>
<name>main.ldapRealm.contextFactory.systemPassword</name>
<value>KnoxPassword@123</value>
</param>
<param>
<name>main.ldapRealm.contextFactory.authenticationMechanism</name>
<value>simple</value>
</param>
<param>
<name>urls./**</name>
<value>authcBasic</value>
</param>
<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>
<name>main.ldapRealm.memberAttributeValueTemplate</name>
<value>cn={0},cn=Users,dc=test,dc=com</value>
</param>
</provider>
<provider>
<role>identity-assertion</role>
<name>Default</name>
<enabled>true</enabled>
</provider>
<provider>
<role>authorization</role>
<name>AclsAuthz</name>
</provider>
</gateway>