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

2019-04-29 10:42:26 浏览数 (1)

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

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文件

代码语言:javascript复制
[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文件内容如下

代码语言:javascript复制
[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 $FULLPRINC; then
        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脚本属主及执行权限

代码语言:javascript复制
[root@cdh01 freeipa]# pwd

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

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

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

4

CDH切换Kerberos认证至FreeIPA

1.停止集群所有服务,CDH和CMS的所有服务

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干货,欢迎转发和分享。

0 人点赞