[
https://issues.apache.org/jira/browse/HADOOP-9299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13600174#comment-13600174
]
Daryn Sharp commented on HADOOP-9299:
-------------------------------------
I'll try to find my patch, but it was incomplete, and I tried various
approaches. First, I tried to avoid using {{KerberosName}} if possible, but
that caused problems because kerberos is always favored regardless of the
client config. I actually think that's a good thing, more on that later. I
believe the last approach was to blindly strip the realm if the client is
insecure.
My problem is running an insecure mini-cluster on my laptop. If I have no TGT,
the unix principal has no realm so passes the rules. If I do have a TGT (bound
to corporate directory), it wants to strip the realm from the kerberos
principal. If the default realm cannot be determined, or does not match my
principal's realm, the rules fail.
On favoring kerberos: If I'm kerberos authenticated, it stands to reason
that's who I am so the user should be derived from the kerberos principal
regardless of whether security is enabled/disabled on the client. Similarly,
shouldn't an "insecure" client be allowed to communicate with a secure cluster
if the user has the necessary kerberos credentials? Maybe I'm trying to copy
data between secure/insecure cluster.
I spoke to Owen awhile back about this issue, and we agreed that the client
should be able to use kerberos credentials regardless of the client config.
Where we had mild disagreement is whether the client should be trying to apply
the name rules. I'd make the case that the client should never apply rules
which are meant for arbitrarily rewriting the principal. All we are using the
rules for on the client is stripping the default realm - if the client changes
the username in the principal I believe it's going to fail the kerberos auth
with the server due to a mismatch with the TGT. Only the server should use the
rules to arbitrarily rewrite the principal into a simple username for the
namesystem. The problem is how some of the fields in a token are converted to
a simple username on the client, which Owen and I agreed is probably wrong. We
might be able to fix this w/o causing incompatibility.
On a tangent: These issues illustrate the growing problem with not being able
to have (semi)universal configs that allow communicating with multiple
clusters. Client security setting shouldn't matter, client shouldn't need the
server's name rules.
> kerberos name resolution is kicking in even when kerberos is not configured
> ---------------------------------------------------------------------------
>
> Key: HADOOP-9299
> URL: https://issues.apache.org/jira/browse/HADOOP-9299
> Project: Hadoop Common
> Issue Type: Bug
> Components: security
> Affects Versions: 2.0.3-alpha
> Reporter: Roman Shaposhnik
> Priority: Blocker
>
> Here's what I'm observing on a fully distributed cluster deployed via Bigtop
> from the RC0 2.0.3-alpha tarball:
> {noformat}
> 528077-oozie-tucu-W@mr-node] Error starting action [mr-node]. ErrorType
> [TRANSIENT], ErrorCode [JA009], Message [JA009:
> org.apache.hadoop.security.authentication.util.KerberosName$NoMatchingRule:
> No rules applied to yarn/localhost@LOCALREALM
> at
> org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier.<init>(AbstractDelegationTokenIdentifier.java:68)
> at
> org.apache.hadoop.mapreduce.v2.api.MRDelegationTokenIdentifier.<init>(MRDelegationTokenIdentifier.java:51)
> at
> org.apache.hadoop.mapreduce.v2.hs.HistoryClientService$HSClientProtocolHandler.getDelegationToken(HistoryClientService.java:336)
> at
> org.apache.hadoop.mapreduce.v2.api.impl.pb.service.MRClientProtocolPBServiceImpl.getDelegationToken(MRClientProtocolPBServiceImpl.java:210)
> at
> org.apache.hadoop.yarn.proto.MRClientProtocol$MRClientProtocolService$2.callBlockingMethod(MRClientProtocol.java:240)
> at
> org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:454)
> at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1014)
> at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1735)
> at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1731)
> at java.security.AccessController.doPrivileged(Native Method)
> at javax.security.auth.Subject.doAs(Subject.java:396)
> at
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1441)
> at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1729)
> Caused by:
> org.apache.hadoop.security.authentication.util.KerberosName$NoMatchingRule:
> No rules applied to yarn/localhost@LOCALREALM
> at
> org.apache.hadoop.security.authentication.util.KerberosName.getShortName(KerberosName.java:378)
> at
> org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier.<init>(AbstractDelegationTokenIdentifier.java:66)
> ... 12 more
> ]
> {noformat}
> This is submitting a mapreduce job via Oozie 3.3.1. The reason I think this
> is a Hadoop issue rather than the oozie one is because when I hack
> /etc/krb5.conf to be:
> {noformat}
> [libdefaults]
> ticket_lifetime = 600
> default_realm = LOCALHOST
> default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
> default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc
> [realms]
> LOCALHOST = {
> kdc = localhost:88
> default_domain = .local
> }
> [domain_realm]
> .local = LOCALHOST
> [logging]
> kdc = FILE:/var/log/krb5kdc.log
> admin_server = FILE:/var/log/kadmin.log
> default = FILE:/var/log/krb5lib.log
> {noformat}
> The issue goes away.
> Now, once again -- the kerberos auth is NOT configured for Hadoop, hence it
> should NOT pay attention to /etc/krb5.conf to begin with.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira