建立从Kerberos到Windows AD的单向信任(允许域账号登录Kerberos集群)

Posted bluishglc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建立从Kerberos到Windows AD的单向信任(允许域账号登录Kerberos集群)相关的知识,希望对你有一定的参考价值。

文章目录

这一操作具有广泛的适用场景,例如:在一个启用了Kerberos的大数据集群下,想联通企业的Windows AD服务器,允许企业用户使用域账号和密码登入集群或提交作业。注意:典型的应用场景下,我们是不需要配置Kerberos与Windows AD双向互信,因为让Windows AD取信任Kerberos管控集群的那些服务账号没有特别大的意义,所以本文只介绍从Kerberos到Windows AD的单向信任操作流程。

1. 环境说明

本操作涉及如下环境信息:

Windws AD的Domain/RealmEXAMPLE.COM
Kerberos的RealmEMR.LOCAL
Kerberos KDC服务器your-ad-hostname

2. 在AD服务器上添加Kerberos的KDC并信任其Realm

打开powershell,执行如下两个命令行:

# 在AD服务器上添加Kerberos的KDC
ksetup /addkdc EMR.LOCAL your-ad-hostname
# 让AD服务器信任Kerberos的Realm:EMR.LOCAL
netdom trust EMR.LOCAL /Domain:EXAMPLE.COM /add /realm /passwordt:Admin1234!

要注意的是命令行中提供的密码Admin1234!将要在后面配置Kerberos对AD信任的操作中再次用到,两次密码必须一致!

3. 配置加密类型

AD与KDC之间的加密类型必须是兼容的,只有这样AD生成的票据才能被Kerberos识别,所以必须要有至少一种加密类型在两端都是认可的。

在Windows AD端,我们应该打开:本地安全策略 -> 安全设置 -> 本地策略 -> 安全选项 -> 网络安全:配置Kerberos允许的加密类型:
该项的默认值是:“没有定义”,我们可以将所有加密项全部勾选,然后保存。

同时,查看Kerberos集群的/etc/krb5.conf配置文件,特别是permitted_enctypes一项:


两相比较,我们可以看到两测共同接受的加密算法是:AES256-CTS-HMAC-SHA1-96 AES128-CTS-HMAC-SHA1-96, 所以我们在AD一则将这两种加密类型设置给EMR.LOCAL。打开powershell,执行如下命令:

ksetup /SetEncTypeAttr EMR.LOCAL  AES256-CTS-HMAC-SHA1-96 AES128-CTS-HMAC-SHA1-96

4. 在Kerberos端配置对AD的信任

首先,我们需要在集群所有节点的/etc/krb5.conf配置文件里添加Windows AD的Realm:EXAMPLE.COM,即如下内容:

[realms]

    EMR.LOCAL = 
        kdc = your-kdc-hostname:88
        admin_server = your-kdc-hostname:749
        default_domain = cn-north-1.compute.internal
    

    EXAMPLE.COM = 
        kdc = your-ad-hostname
        admin_server = your-ad-hostname
    

再次提醒,对/etc/krb5.conf的修改需要在所有Kerberos集群的机器上执行一遍。

最后,也是非常关键的一步,我们要创建一个principal, 通过这个principal来打通两个realm之间的信任关系:

kadmin.local -q "addprinc krbtgt/EMR.LOCAL@EXAMPLE.COM"

这个principal的名字要特别注意,不是随便起的,它的格式是:krbtgt/KRB_REALM@AD_REALM。而给用户输入的密码必须是在第2步命令行中设定的那个密码,即Admin1234!,两处的密码必须一致!

5. 修改应用程序的认证配置

我们以Hadoop为例,如果启用了Kerberos,还添加了新的Realm, 我们需要修改:

  • /etc/hadoop/conf/core-site.xml
  • /etc/hadoop-kms/conf/kms-site.xml

两个文件中的hadoop.security.auth_to_local一项,这一配置项的主要作用是把AD上的用户名做一些适当的转换,使之在Linux上成为合规的用户名,否则使用AD账号操作Hadoop会报错: Illegal principal name 的错误,通常我们可以这样配置:

  <property>
    <name>hadoop.security.auth_to_local</name>
    <value>
      RULE:[1:$1@$0](^.*@EXAMPLE.COM$)s/^(.*)@EXAMPLE.COM$/$1/g
	  RULE:[2:$1@$0](^.*@EXAMPLE.COM$)s/^(.*)@EXAMPLE.COM$/$1/g
      DEFAULT
    </value>
  </property>

原始配置中的默认规则,如 RULE:[1:$1@$0](.*@)s/@.*///LRULE:[2:$1@$0](.*@)s/@.*///L需移除!

参考文章: https://www.ibm.com/docs/en/spectrum-scale-bda?topic=kaadas-create-one-way-trust-from-mit-kdc-active-directory

以上是关于建立从Kerberos到Windows AD的单向信任(允许域账号登录Kerberos集群)的主要内容,如果未能解决你的问题,请参考以下文章

建立Windows AD对Kerberos的单向信任(允许使用域账号登录Kerberos集群)

Kerberos 委派和特定于端口的 SPN

RHEL7系统应用

使用 kerberos 和 AD 的 Oracle 数据库身份验证

在没有用户密码的情况下生成 AD Kerberos 票证

kerberos 身份验证-功能组