多领域

时间:2014-10-15 12:42:36

标签: java hadoop kerberos

我正在设置客户端并使用Java客户端连接到多个启用Kerberos的系统。

使用UserGroupInformation。如果使用其他领域,Java客户端总是选择default_realm并抛出错误。

是否可以使用不同的键盘和不同的主体连接,但使用相同的krb5.conf

/etc/krb5.conf

[libdefaults]
default_realm = NEW.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 1d
renew_lifetime = 7d
forwardable = true

[realms]
NEW.COM = {
  kdc = bharath.kdc
  admin_server = bharath.kdc
}

EXAMPLE.COM = {
  kdc = wckdserver.krbnet
  admin_server = wckdserver.krbnet
}

4 个答案:

答案 0 :(得分:1)

您可以使用以下格式的jaas配置文件控制使用哪个keytab:

client {
  com.sun.security.auth.module.Krb5LoginModule required
  refreshKrb5Config=true
  useKeyTab=true
  keyTab="<path to keytab>"
  principal="<user>@<realm>";
};

此配置文件使用系统属性设置:

-Djava.security.auth.login.config=<path to jaas config>

如果要在单次运行VM期间更改设置,则需要清除VM中的缓存用户配置:

Configuration.setConfiguration(null);

要使用不同的领域,您需要指定以下属性的

-Djava.security.krb5.realm=<realm>
-Djava.security.krb5.kdc=<kdc>

答案 1 :(得分:1)

您可以在JAAS配置文件中有两个(或更多)部分用于不同的keytab文件,如下所示:

com.sun.security.jgss.krb5.accept {

 com.sun.security.auth.module.Krb5LoginModule required
 principal="user1@DOMAIN1.COM" useKeyTab=true
 keyTab="C:\\Oracle\\Middleware12.1.1\\MyDomain\\domain1_keytab" storeKey=true;

 com.sun.security.auth.module.Krb5LoginModule required
 principal="user2@DOMAIN2.COM" useKeyTab=true
 keyTab="C:\\Oracle\\Middleware12.1.1\\MyDomain\\domain2_keytab" storeKey=true;

};

您可能需要从配置文件中删除所有领域信息。然后,当您更改此系统设置时:

System.setProperty("sun.security.krb5.principal", "userX@DOMAINX.COM");

其中&#34; X&#34;应该替换为1或2,您可以使Kerberos选择不同的keytab文件。

系统将根据&#34; sun.security.krb5.principal&#34;在JAAS配置中搜索相关部分。设置并将使用此主体及其相应的密钥表进行Kerberos身份验证。

答案 2 :(得分:0)

要配置多个领域,请将krb5.conf设置为:

[libdefaults]
default_realm = XYZ.LOCAL

[realms]
XYZ.LOCAL = {
  kdc = abc.xyz.local
  default_domain = XYZ.LOCAL
}

SECOND.NET = {
  kdc = abc.second.net
}

[domain_realm]
.xyz.local = .XYZ.LOCAL
xyz.local = XYZ.LOCAL
.second.net = .SECOND.NET
second.net = SECOND.NET

答案 3 :(得分:0)

我的用例略有不同,但分享是因为它听起来非常相似,所以这可能适合你。

添加到 krb5.conf:

[domain_realm]
  .example.com = EXAMPLE.COM

然后当您连接到 *.example.com 时,它将使用EXAMPLE.COM 领域而不是默认领域。

更多信息:https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html#domain-realm