0561-04-如何将CDH集成的KDC迁移至FreeIPA的Kerberos认证

谁说我不能喝 提交于 2021-01-11 03:04:25

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


Fayson的github:

https://github.com/fayson/cdhproject


提示:代码块部分可以左右滑动查看噢


1

文档编写目的


前面Fayson介绍了《0558-01-如何在Redhat7上安装FreeIPA》和《0559-02-如何在Redhat7上安装FreeIPA的客户端》,那如何在CDH集群中使用?通过Cloudera Manager可以为我们的CHD集群启用Kerberos认证,在前面的文章《如何为CDH集成Active Directory的Kerberos认证》和《如何在CDH集群启用Kerberos》介绍了集成不同服务的Kerberos认证,本篇文章Fayson主要介绍如何将CDH集成的KDC服务切换至FreeIPA下的Kerberos认证。 


  • 测试环境

1.RedHat7.3

2.FreeIPA4.6.4

3.CM和CDH版本为5.15.0


2

环境准备


1.确认CDH机器所有节点已安装了FreeIPA Client,可以参考Fayson上一篇文章《02-如何在Redhat7上安装FreeIPA的客户端


2.安装完成FreeIPA客户端后,修改集群所有节点krb.conf文件



3.FreeIPA上创建一个cloudera-role角色并赋予权限



点击添加按钮添加一个cloudera-role角色



点击“编辑和编辑”进入角色编辑界面



点击特权菜单,为该角色授权



完成角色授权



4.FreeIPA上创建一个cloudera-scm的用户



点击角色菜单,为cloudera-scm用户添加角色



完成cloudera-scm用户的创建



3

自定义脚本生成keytab


相较于之前的两片文章,本篇文章会复杂一些,因为CDH默认没有提供FreeIPA的集成,所以需要参考官网的文章使用自定义脚本生成keytab,地址如下:

https://www.cloudera.com/documentation/enterprise/latest/topics/sg_keytab_retrieval_script.html


1.Cloudera Manager服务所在节点上创建一个脚本目录/opt/cloudera/freeipa



该目录主要存放自定义导出keytab脚本。


2.进入/opt/cloudera/freeipa目录执行如下命令导出cloudera-scm用户的keytab文件


[root@cdh01 freeipa]# cd /opt/cloudera/freeipa/

[root@cdh01 freeipa]# kinit cloudera-scm
[root@cdh01 freeipa]# ipa-getkeytab -p cloudera-scm -k cloudera-scm.keytab -s cdh04.fayson.net

[root@cdh01 freeipa]# chown cloudera-scm. cloudera-scm.keytab 
[root@cdh01 freeipa]# ll



3./opt/cloudera/freeipa目录下创建getkeytabs.sh文件内容如下


[root@cdh01 ~]# cd /opt/cloudera/freeipa/
[root@cdh01 freeipa]# vim getkeytabs.sh
#set -e
set -x

CMKEYTAB="/opt/cloudera/keytab/cloudera-scm.keytab"
CMUSER="cloudera-scm"
REALM="FAYSON.NET"
IPASERVER="cdh04.fayson.net"

DEST="$1"
FULLPRINC="$2"

# Passwd based kinit
#echo PASSWORD | kinit $CMUSER@$REALM

# Or per keytab (keytab needs to be generated before)
kinit -k -t $CMKEYTAB $CMUSER@$REALM

PRINC=$( echo $FULLPRINC | sed "s/\@$( echo $REALM )//" )

echo $PRINC

echo Retrieving keytab for $FULLPRINC for $DEST

echo Checking for existing service principle
if ipa service-find $FULLPRINCthen
        echo Service principle found
else
        echo Service principle not created, creating
        ipa service-add $FULLPRINC --pac-type=NONE
fi

echo Ensuring service allows
ipa service-allow-create-keytab --users=$CMUSER $FULLPRINC
ipa service-allow-retrieve-keytab --users=$CMUSER $FULLPRINC

if ipa service-show $FULLPRINC | grep 'Keytab' | grep 'False'then
        echo Creating keytab for $FULLPRINC for $DEST
        ipa-getkeytab -s $IPASERVER -p $PRINC -k $DEST -e rc4-hmac,aes256-cts,aes128-cts
else
        echo Retrieving keytab for $FULLPRINC for $DEST
        ipa-getkeytab -r -s $IPASERVER -p $PRINC -k $DEST
fi

chmod 600 $DEST

kdestroy

exit 0;



4.修改getkeytabs.sh脚本属主及执行权限


[root@cdh01 freeipa]# pwd

[root@cdh01 freeipa]# chown cloudera-scm. getkeytabs.sh 

[root@cdh01 freeipa]# chmod +x getkeytabs.sh 



注意:getkeytabs.sh脚本中CMKEYTABCMUSERREALMIPASERVER参数修改为自己相应环境的配置。


4

CDH切换Kerberos认证至FreeIPA


1.停止集群所有服务,CDHCMS的所有服务



2.进入管理”->“设置界面,通过过滤类别筛选Kerberos相关配置



配置FreeIPA相关配置信息




3.配置自定义脚本地址



4.完成keytab生成自定义脚本的配置后,到Kerberos凭据管理界面,重新生成所有服务的Kerberos信息



命令运行成功,以重新生成了所有服务的keytab文件



5.登录FreeIPA也可以看到生成的所有服务的Principal



5

Kerberos集成验证


1.通过CM启动集群所有服务



2.提交一个MapReduce作业测试



作业执行成功



6

总结


1.CDH集成FreeIPA的Kerberos,需要在集群的所有节点安装FreeIPA Client,安装客户端时会默认的配置Kerberos信息到每个节点的/etc/krb5.conf文件中。


2.由于CDH默认不支持集成FreeIPA,因此在集成FreeIPA的Kerberos时需要自定义生成keytab脚本


3.在CM中配置了自定义生成keytab脚本后,会忽略所有的Kerberos的配置信息,以脚本为主生成keytab文件


4.在FreeIPA上我们需要创建一个cloudera-scm用户并授权Service和DNS服务的管理员权限,使cloudera-scm用户有创建服务账号和添加DNS解析的权限。


5.在getkeytabs.sh脚本中,ipa-getkeytab导出keytab时指定了加密类型为rc4-hmac,否则在启动Zookeeper服务时会报错。


6.在生成keytab报错时可以将set -e参数开启,shell脚本运行时会打印详细的日志信息,便于定位脚本执行到哪一步报错,但是ipa service-allow-create-keytab命令成功执行过后,重复执行会导致脚本无法运行成功,除调试外将set -e屏蔽。


7.特别注意需要将FreeIPA默认的krb5.conf配置文件中default_ccache_name = KEYRING:persistent:%{uid}参数注释掉,否则会导致无法访问HDFS服务提交作业等。


参考:

https://mapredit.blogspot.com/2016/10/freeipa-and-hadoop-distributions-hdp-cdh.html


提示:代码块部分可以左右滑动查看噢


为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!