繁体   English   中英

如何让Hadoop客户端在安全(Kerberos)集群中使用正确的凭据

[英]How to get Hadoop client to user correct credentials in a secure (Kerberos) clusters

我有一个Hadoop(CDH412)群集设置已启用,可以使用Kerberos进行身份验证和授权。 我把一切都搞好了(Hdfs,mapred,zookeeper,hbase,hive等)。 但是,我在从Java应用程序中访问hdfs数据时遇到问题。

我的Java应用程序是在后台运行的服务。 因此,无法输入密码,我必须使用密钥表文件。 应该不是问题。 如果我先做一个'kinit',它就可以了。

kinit -kt /home/fred/kerberostest/krb5.keytab myprinc/myserver.com@MY.REALM

但是,如果我尝试在java代码中执行此操作(我已经读过LoginContext.logon将执行与kinit相同的操作),则会失败。

为了尝试测试这个,我编写了以下代码片段....

System.setProperty("java.security.krb5.realm", "MY.REALM");
System.setProperty("java.security.kdc", "kdc.server.com");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
System.setProperty("java.security.auth.login.config", "/home/fred/kerberostest/jaas.conf");

LoginContext context = new LoginContext("Client");
context.login();

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);

InputStream in = fs.open(new Path("/mytestfile"));
int b = in.read();
in.close();

我的jaas.conf文件看起来像这样......

Client {
   com.sun.security.auth.module.Krb5LoginModule required
   debug=true
   useKeyTab=true
   keyTab="/home/fred/kerberostest/krb5.keytab"
   principal="myprinc/myserver.com@MY.REALM"
   useTicketCache=false;
}

当我运行上面的java代码时,LoginContext.login似乎正常工作....我得到一个调试声明

Login successful for user myprinc/myserver.com@MY.REALM using keytab file /home/fred/kerberostest/krb5.keytab

但是,当代码尝试打开HDFS文件(fs.open)时,应用程序失败并显示PriviledgedActionException,并声明:

ERROR security.UserGroupInformation: PriviledgedActionException as :fred (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

因此,它试图使用“fred”(我的linux登录)来访问这些文件,而不是从keytab文件中获取我的主要信息。 再说一次,如果我先做一个kinit,它运行正常....但是LoginContext不应该做同样的事情吗?

注意:这是Kerberos的ActiveDirectory“版本”。 它没有使用信任......只是直接使用ActiveDirectory。

我将在我们的Active Directory实现上归咎于此。 我用MIT Kerberos做到了这一点并且工作正常。 关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM