建立从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/Realm | EXAMPLE.COM |
Kerberos的Realm | EMR.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/@.*///L
和RULE:[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集群)