[ https://issues.apache.org/jira/browse/ACCUMULO-3849?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Josh Elser resolved ACCUMULO-3849. ---------------------------------- Resolution: Fixed > Proxy sets incorrect primary for SASL server transport > ------------------------------------------------------ > > Key: ACCUMULO-3849 > URL: https://issues.apache.org/jira/browse/ACCUMULO-3849 > Project: Accumulo > Issue Type: Bug > Components: proxy > Reporter: Josh Elser > Assignee: Josh Elser > Priority: Blocker > Fix For: 1.8.0, 1.7.1 > > Time Spent: 20m > Remaining Estimate: 0h > > A doozie for a Friday afternoon before a long weekend: > On SuSE11, KerberosProxyIT was failing with the client unable to set up the > SASL handshake. > {noformat} > 2015-05-20 06:27:44,670 [proxy.Proxy] INFO : Proxy server started on > ip-172-31-5-57.ec2.internal:57147 > 2015-05-20 06:27:45,227 [transport.TSaslServerTransport] DEBUG: transport map > does not contain key > 2015-05-20 06:27:45,232 [transport.TSaslServerTransport] DEBUG: Received > start message with status START > 2015-05-20 06:27:45,232 [transport.TSaslServerTransport] DEBUG: Received > mechanism name 'GSSAPI' > 2015-05-20 06:27:45,248 [transport.TSaslTransport] ERROR: SASL negotiation > failure > javax.security.sasl.SaslException: Failure to initialize security context > [Caused by GSSException: No valid credentials provided (Mechanism level: > Failed to find any Kerberos credentails)] > at > com.sun.security.sasl.gsskerb.GssKrb5Server.<init>(GssKrb5Server.java:125) > at > com.sun.security.sasl.gsskerb.FactoryImpl.createSaslServer(FactoryImpl.java:85) > at javax.security.sasl.Sasl.createSaslServer(Sasl.java:524) > at > org.apache.thrift.transport.TSaslServerTransport.handleSaslStartMessage(TSaslServerTransport.java:140) > at > org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:253) > at > org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) > at > org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory$1.run(UGIAssumingTransportFactory.java:51) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory$1.run(UGIAssumingTransportFactory.java:48) > at java.security.AccessController.doPrivileged(Native Method) > at javax.security.auth.Subject.doAs(Subject.java:360) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1637) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory.getTransport(UGIAssumingTransportFactory.java:48) > at > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:208) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.accumulo.fate.util.LoggingRunnable.run(LoggingRunnable.java:35) > at java.lang.Thread.run(Thread.java:745) > Caused by: GSSException: No valid credentials provided (Mechanism level: > Failed to find any Kerberos credentails) > at > sun.security.jgss.krb5.Krb5AcceptCredential.getInstance(Krb5AcceptCredential.java:87) > at > sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:127) > at > sun.security.jgss.GSSManagerImpl.getCredentialElement(GSSManagerImpl.java:193) > at sun.security.jgss.GSSCredentialImpl.add(GSSCredentialImpl.java:427) > at sun.security.jgss.GSSCredentialImpl.<init>(GSSCredentialImpl.java:62) > at > sun.security.jgss.GSSManagerImpl.createCredential(GSSManagerImpl.java:154) > at > com.sun.security.sasl.gsskerb.GssKrb5Server.<init>(GssKrb5Server.java:108) > ... 17 more > 2015-05-20 06:27:45,254 [transport.TSaslServerTransport] DEBUG: failed to > open server transport > org.apache.thrift.transport.TTransportException: Failure to initialize > security context > at > org.apache.thrift.transport.TSaslTransport.sendAndThrowMessage(TSaslTransport.java:221) > at > org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:297) > at > org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) > at > org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory$1.run(UGIAssumingTransportFactory.java:51) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory$1.run(UGIAssumingTransportFactory.java:48) > at java.security.AccessController.doPrivileged(Native Method) > at javax.security.auth.Subject.doAs(Subject.java:360) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1637) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory.getTransport(UGIAssumingTransportFactory.java:48) > at > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:208) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.accumulo.fate.util.LoggingRunnable.run(LoggingRunnable.java:35) > at java.lang.Thread.run(Thread.java:745) > 2015-05-20 06:27:45,260 [server.TThreadPoolServer] ERROR: Error occurred > during processing of message. > java.lang.RuntimeException: org.apache.thrift.transport.TTransportException: > Failure to initialize security context > at > org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory$1.run(UGIAssumingTransportFactory.java:51) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory$1.run(UGIAssumingTransportFactory.java:48) > at java.security.AccessController.doPrivileged(Native Method) > at javax.security.auth.Subject.doAs(Subject.java:360) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1637) > at > org.apache.accumulo.core.rpc.UGIAssumingTransportFactory.getTransport(UGIAssumingTransportFactory.java:48) > at > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:208) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at > org.apache.accumulo.fate.util.LoggingRunnable.run(LoggingRunnable.java:35) > at java.lang.Thread.run(Thread.java:745) > Caused by: org.apache.thrift.transport.TTransportException: Failure to > initialize security context > at > org.apache.thrift.transport.TSaslTransport.sendAndThrowMessage(TSaslTransport.java:221) > at > org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:297) > at > org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) > at > org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216) > ... 11 more > {noformat} > So, the Thrift code is unable to actually use the KRB credentials we _know_ > we logged in with. Strange. > Looking a bit earlier, we can see that we did log in. > {noformat} > 2015-05-20 06:27:44,498 [security.UserGroupInformation] INFO : Login > successful for user proxy/hostn...@example.com using keytab file > /grid/0/hadoopqe/artifacts/accumulo/test/target/kerberos/keytabs/proxy.keytab > 2015-05-20 06:27:44,498 [proxy.Proxy] INFO : Logged in as > proxy/hostn...@example.com > {noformat} > So, for some reason, when we log in on SuSE, we somehow later dont' have the > right credentials? > Just after we log in, we start the Thrift server for the proxy > {noformat} > 2015-05-20 06:27:44,516 [rpc.TServerUtils] DEBUG: Instantiating SASL Thrift > server > 2015-05-20 06:27:44,524 [rpc.TServerUtils] INFO : Creating SASL thread pool > thrift server on listening on hostname:57147 > 2015-05-20 06:27:44,532 [rpc.TServerUtils] DEBUG: Logged in as > proxy/hostn...@example.com (auth:KERBEROS), creating TSaslServerTransport > factory with accumulo/hostname > {noformat} > Hold up: > {noformat} > proxy/hostn...@example.com != accumulo/hostname > {noformat} > Turns out, when we created the ClientConfiguration for the ProxyServer, we > didn't actually set the kerberosPrimary (the client needs to know the > 'primary' of the principal of the server in which it's authenticating with). > Somehow, on _every other OS and environment_ this didn't error out like it > should have. I have no explanation why. > Sorry, SuSE. You did it right. -- This message was sent by Atlassian JIRA (v6.3.4#6332)