kerberos互信详细步骤

效果:用TESTA集群的keytab,能访问TESTB集群的服务。
一、KDC互信步骤:
准备工作:/etc/hosts 主机名映射及网络策略打通。

1、首先在两台kdc都添加2个pricipals:
krbtgt/TESTA.COM@TESTB.COM
krbtgt/TESTB.COM@TESTA.COM
这2个同样的pricipal分别于两台kdc上的密码、密钥版本号kvno、加密方式必须一致。

举例:密码、密钥版本号kvno、加密方式必须一致。
addprinc -e aes256-cts-hmac-sha1-96:normal,aes128-cts-hmac-sha1-96:normal -kvno 2 krbtgt/HADOOP.COM@ASIO
addprinc -e aes256-cts-hmac-sha1-96:normal,aes128-cts-hmac-sha1-96:normal -kvno 2 krbtgt/ASIO@HADOOP.COM
根据提示输入密码: Admin@123Huawei@2020

说明:
密钥版本号(kvno):当用户更改principal的密码或管理员更新应用程序服务器的密钥(提取新的keytab)时,会自动递增该值来记录每次更改。标识密钥版本的计数器的当前值被称为密钥版本号,简称为kvno。
关于加密方式:normal和special的区别:keyslot密码。
/etc/krb5.conf中也必须配置为支持normal加密。
supported_enctypes = aes256-cts-hmac-sha1-96:normal aes128-cts-hmac-sha1-96:normal

2、验证这两个entries是否具有匹配的kvno和加密type(非常重要):
查看命令 getprinc <principal_name> ,如:
getprinc krbtgt/YYY.COM@XXX
getprinc krbtgt/XXX@YYY.COM

3、分别在这两台kdc中,执行以下命令,验证密码是否一致(非常重要):
kinit krbtgt/YYY.COM@XXX 输入密码 ****验证密码是否正确。
kinit krbtgt/XXX@YYY.COM

4、 两个集群内的所有主机,均需修改/etc/krb5.conf 配置信任关系,这样才能找到对方。
在集群1上 TESTA.COM 29.@@@.53(sy@@@)上修改:
udp_preference_limit = 1
[realms]
TESTA.COM = {
kdc = sy@@@
admin_server = sy@@@
master_kdc = sy@@@
default_domain = .TESTA.COM
}

TESTB.COM = {
kdc = s@@@8
admin_server = s@@@8
master_kdc = s@@@8
default_domain = .TESTB.COM
}

[domain_realm]
.testa.com = TESTA.COM
testa.com = TESTA.COM
.testb.com = TESTB.COM
testb.com = TESTB.COM
sy@@@ = TESTA.COM #kdc主机
s@@@8 = TESTB.COM #kdc主机
sy@@@ = TESTA.COM #nn active主机 最好把standby也加上!!! 必须要配置!!!
s@@@8 = TESTB.COM #nn active主机
[capaths]
TESTA.COM = {
TESTB.COM = .
}
TESTB.COM = {
TESTA.COM = .
}

在集群2上 TESTB.COM 29.@@@.54(s@@@8)上修改/ec/krb5.conf:

[realms]
TESTA.COM = {
kdc = sy@@@
admin_server = sy@@@
master_kdc = sy@@@
default_domain = .TESTA.COM
}

TESTB.COM = {
kdc = s@@@8
admin_server = s@@@8
master_kdc = s@@@8
default_domain = .TESTB.COM
}

[domain_realm]
.testb.com = TESTB.COM
testb.com = TESTB.COM
.testa.com = TESTA.COM
testa.com = TESTA.COM
sy@@@ = TESTA.COM #kdc主机
s@@@8 = TESTB.COM #kdc主机
sy@@@ = TESTA.COM #nn active主机 最好把standby也加上!!!
s@@@8 = TESTB.COM #nn active主机

[capaths]
TESTB.COM = {
TESTA.COM = .
}
TESTA.COM = {
TESTB.COM = .
}

5、重启Namdnode及KDC服务
重启kerberos服务之后,会利用kvno工具获取对方域的ticket。

6、注意:
即便不做kdc互信,只在krb5.conf中融合多个realm,也可以直接使用kinit 认证不同的principal,会根据realm自动匹配不同的kdc。故只是kinit成功,并不代表互信成功。

A A集群 hdfs权限。A-principal --> A A集群权限
A-principal B集群。追加A集群解析RULE,–A B集群权限

二、KDC互信后,还需要对每种要访问的服务配置principal和本地系统用户的映射关系

(一)、如果是hadoop集群的互信,则配置hadoop集群的两个kdc中租户principal的映射关系。
1、修改core-site.xml(两个域都要配置)配置principal和user的映射RULES

hadoop.security.auth_to_local

RULE:1:$1@$0s/./ocdp/ 对端集群的smoker转换为ocdp
RULE:[1:$1@ 0 ] ( . ∗ @ T E S T A C ˙ O M 0](^.*@TESTA\.COM 0](.@TESTAC˙OM)s/^(.
)@TESTA.COM$/$1/g
RULE:[2:$1@ 0 ] ( . ∗ @ T E S T A C ˙ O M 0](^.*@TESTA\.COM 0](.@TESTAC˙OM)s/^(.)@TESTA.COM$/$1/g
RULE:[1:$1@ 0 ] ( . ∗ @ T E S T B C ˙ O M 0](^.*@TESTB\.COM 0](.@TESTBC˙OM)s/^(.
)@TESTB.COM$/$1/g
RULE:[2:$1@ 0 ] ( . ∗ @ T E S T B C ˙ O M 0](^.*@TESTB\.COM 0](.@TESTBC˙OM)s/^(.*)@TESTB.COM$/$1/g
DEFAULT

2、修改hdfs-site.xml(两个域都要配置)
在hdfs-site.xml,设置允许的realms
在hdfs-site.xml中设置dfs.namenode.kerberos.principal.pattern为""

dfs.namenode.kerberos.principal.pattern

3、测试
TESTA上使用hdfs/sy@@@@TESTA.COM访问两个集群的文件 hdfs dfs -ls hdfs://domainB.com:8020
TESTB上使用hdfs/s@@@8@TESTB.COM访问两个集群的文件 hdfs dfs -ls hdfs://domainA.com:8020

(二)、如果要消费kafka,则需修改kafka中principal和user的映射RULES
kdc互信成功后,修改kafka的配置信息, 修改server.properties中的sasl.kerberos.principal.to.local.rules属性:
<56f8fa0b24af4ca31a6d15ff2a19c46f.png>

其原来的默认值是:
<13789abf22ec703759e7a2cd11b2dcdf.png>

增加:
RULE:1:$1@$0s/@.*//,

原值:
RULE:1:$1@$0s/./op/,
RULE:1:$1@$0s/@.
//,
RULE:2:$1@$0s/./op/,
RULE:2:$1@$0s/.
/op/,
RULE:2:$1@$0s/./op/,
RULE:2:$1@$0s/.
/op/,
RULE:2:$1@$0s/./rangertagsync/,
RULE:2:$1@$0s/.
/rangerusersync/,
DEFAULT

验证该规则是否正确:
该规则配置好以后,使用以下命令验证:
hadoop org.apache.hadoop.security.HadoopKerberosName FlinkUser@hadoop.com

三、附录:sasl.kerberos.principal.to.local.rules配置说明
参考文档:https://community.cloudera.com/t5/Community-Articles/Auth-to-local-Rules-Syntax/ta-p/245316
参阅kerberos文档:https://web.mit.edu/Kerberos/krb5-latest/doc/admin/conf_files/krb5_conf.html#realms。

sasl.kerberos.principal.to.local.rules的格式是一个列表,其中每个规则的工作方式与Kerberos 配置文件 (krb5.conf)中的auth_to_local相同。
该规则也支持小写规则,可通过在规则的末尾添加“/L”,强制转移全部结果为小写。
每个规则都以RULE开头:并包含一个表达式,格式如下。
RULE:n:strings/pattern/replacement/
RULE:n:strings/pattern/replacement/g
RULE:n:strings/pattern/replacement//L
RULE:n:strings/pattern/replacement/g/L

sasl.kerberos.principal.to.local.rules,用于将principal的name与本地系统用户name的映射规则。
RULE:定义一个表达式。
格式为:RULE:n:strings/pattern/replacement/g
n表示:目标principal中(不含realm部分)共有几部分。如果principal的组成部分匹配该n值,则会将principal的realm替换为 0 ,并将 p r i n c i p a l 中的第 n 个组成部分替换为 0,并将principal中的第n个组成部分替换为 0,并将principal中的第n个组成部分替换为n。
通常第二部分可以忽略,因为第2部分通常为主机名。故配置为 RULE:[1:$1@$0] 即可。
RULE:[1:$1@$0] 会将ambari-qa@EXAMPLE.COM 转换为ambari-qa@EXAMPLE.COM。
RULE:[2:$1@$0] 会将nn/c6501.ambari.apache.org@EXAMPLE.COM 转换为nn@EXAMPLE.COM。
string部分:如果principal是john/admin,则[2:$2$1foo]意味着会将整个principal提取转换为字符串“adminjohnfoo”。
regexp部分:principal提取转换后的字符串,是否匹配该正则表达式。如果匹配,则进行后续的替换。
举例:正则表达式 (.*@EXAMPLE.COM)
匹配以下principal:ambari-qa@EXAMPLE.COM 、nn/c6501.ambari.apache.org@EXAMPLE.COM、any_name@EXAMPLE.COM
不匹配以下principal:ambari-qa@NOT.EXAMPLE.COM 、nn/c6501.ambari.apache.org@OTHER.REAM

替换规则 s/pattern/replacement/ 和 s/pattern/replacement/g
如果principal转换后的字符串与正则表达式匹配,那么[s//[g]]的替换命令将会对生成的字符串上执行替换操作。
g为可选项,g是指替换字符串时是全局的,不是只替换第一个匹配项。
DEFAULT规则:principal的name即作为本地用户。如果principal只有1部分,则直接映射为本地用户。如果principal有2个组成部分或者不在默认的realm中,则此default规则并不适用,将会映射失败。
多个RULE的顺序,依次执行。

举例:
[realms]
ATHENA.MIT.EDU = {
auth_to_local = RULE:[2: 1 ] ( j o h n d o e ) s / . ∗ 1](johndoe)s/^.* 1](johndoe)s/./guest/
auth_to_local = RULE:[2:$1; 2 ] ( . ∗ ; a d m i n 2](^.*;admin 2](.;admin)s/;admin$//
auth_to_local = RULE:[2: 2 ] ( . ∗ ; r o o t ) s / . ∗ 2](^.*;root)s/^.* 2](.;root)s/./root/
auth_to_local = DEFAULT
}
该规则含义:
如果principal的第2部分,没有root或admin,那么会使用default规则进行转换。
如果principal的第2部分是admin,那么admin将会被替换为空串,principal只保留第一部分。
如果principal的第2部分是root,那么整个principal将会被替换为root。
另外,johndos/*的principal,将会被整个替换为guest。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值