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