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 >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
