前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何基于Ambari禁用Kerberos

如何基于Ambari禁用Kerberos

原创
作者头像
create17
修改2019-01-23 10:31:01
2.7K0
修改2019-01-23 10:31:01
举报

前面的文章介绍了《Kerberos原理--经典对话》、《Kerberos基本概念及原理汇总》、《基于ambari的Kerberos安装配置》、《Windows本地安装配置Kerberos客户端》,《Kerberos实战》,接下来再来聊聊基于Ambari如何禁用Kerberos,可不是在页面上点击禁用Kerberos那么顺利噢,有的时候服务会启动失败啊~

一、思考

使用Ambari启用Kerberos过程中,都做了哪些操作?

  • 生成PrincipalKeytab
  • 修改集群内各服务的配置
  • Zookeeper上的某些服务的znode进行sasl权限控制。saslKerberos特有的设置znode的一种权限

但是在Ambari页面上禁用Kerberos的过程中,有的Zookeeperznode节点的权限依旧被sasl控制,所以禁用Kerberos后,有的服务起不来,或者有告警出现。

二、禁用Kerberos

Ambari页面切换到Kerberos管理界面,点击禁用Kerberos按钮,如下图所示:

会弹出一个窗口,如下图所示:

我们点击”坚持继续“,Ambari就会自动解除Kerberos的控制,如下图所示:

过程中可能会出现“管理会话过期的提示”,如下图所示:

  • 管理主体:填写你自定义创建的Principal。例如:admin/admin@EXAMPLE.COM,也可以省略@EXAMPLE.COM,可直接填写admin/admin
  • 管理密码:填写自定义创建Principal时的密码。

这样禁用Kerberos就已经算是成功了,不过返回服务面板,可能会出现告警。是的,因为Zookeeper中有的znode节点可能还在受sasl的权限控制,所以有的服务中的组件就会启动失败

比如hiveserver2,就会报端口号10000监听不到的告警异常。

所以我们需要修改znode权限,将znode的权限全部修改为world:anyone:cdrwa模式。

三、修改znode权限

使用普通用户无法删除带有saslznode节点。我们可以启用Zookeeper超级管理员模式来删除znode节点。

1. md5加密超级管理员密码

设置Zookeeper超级管理员权限,首先需要对超级管理员的密码进行md5加密,现在设置超级管理员的密码是admin,那么密码需要怎么加密呢?

代码语言:javascript
复制
export ZK_CLASSPATH=/etc/zookeeper/conf/:/usr/hdp/current/zookeeper-server/lib/*:/usr/hdp/current/zookeeper-server/*
java -cp $ZK_CLASSPATH org.apache.zookeeper.server.auth.DigestAuthenticationProvider super:admin
super:admin->super:xQJmxLMiHGwaqBvst5y6rkB6HQs=

由输出结果可见,admin经过md5加密,变成了xQJmxLMiHGwaqBvst5y6rkB6HQs=

2. 编辑zkServer.sh
代码语言:javascript
复制
vim /usr/hdp/2.6.4.0-91/zookeeper/bin/zkServer.sh

定位到文件的第135行,将

代码语言:javascript
复制
"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="

粘贴到指定位置,如下图所示:

进入到Ambari Web UI,重启该节点上的Zookeeper服务。

注:如果需要取消Zookeeper超级管理员,可将zkServer.sh文件中新添的内容删除,并重启该节点上的Zookeeper服务即可。

3. 删除znode节点或修改znode权限

首先确保该节点用户下无Principal缓存认证,可以执行kdestroy命令进行销毁,klist命令进行查看。

代码语言:javascript
复制
/usr/hdp/2.6.4.0-91/zookeeper/bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 17]  addauth digest super:admin

我们可以使用getAcl命令来查看每个znode节点的权限。

由于随着服务个数的增多,znode的个数也会增多,所以还是建议根据服务的异常(启动失败或异常告警)来查看对应服务的znode节点的权限,如果是sasl权限的话,我们可以使用Zookeeper超级管理员的身份对znode做点事情了,好让服务变得正常。

这里我们有两种方式,这两种方式各有利弊:

方式一

可以使用setAcl /xxx world:anyone:cdrwa命令来重新设置znode权限,去除sasl模式。例如:修改hiveserver2的权限为cdrwa

代码语言:javascript
复制
setAcl /hiveserver2 world:anyone:cdrwa

弊端:设置znode权限并不影响该节点的子znode的权限。换句话说,设置一个节点的权限,并不影响该节点的子节点的权限。所以我们需要一个一个的去setAcl,会比较麻烦,但是这样不会丢失znode注册的信息数据。

方式二

简单粗暴的,将有saslznode节点全部删除,然后重启对应的服务,它会自动的在Zookeeper集群上注册znode信息。执行rmr <path>命令,例如:删除hiveserver2

代码语言:javascript
复制
rmr /hiveserver2

有时候会提示由于子znode存在,该znode无法被删除。我们可以先删除子znode后,再删除父znode

弊端:这样会导致一些信息的丢失。

很抱歉,目前还没有找到更好的处理方式。

值得一提的是,Zookeeper中的znode节点如果在启用Kerberos之前就已经被注册,那么在启用Kerberos之后就不会被重新注册,所以权限也不会被改变,依旧使用的是启用Kerberos之前的权限(cdrwa)。如果需要更改为sasl权限,可以将自己使用setAcl命令设置,或删除znode节点后,重启对应服务。

四、总结

使用Ambari禁用Kerberos,不像CDH产品一样,可以进行服务的Zookeeper初始化。在禁用Kerberos后,我们需要手动修改部分znode的权限,这样某些服务在禁用Kereros服务之后才可以正常使用。

当然我们也可以先停止所有服务,然后删除所有znode,然后再启动禁用kerberos流程。只不过这样有些信息会被丢失。比如ResourceManagerApplications历史数据会被清空;由于Solr的配置文件会在Zookeeper上储存,所以也会丢失。个中利弊,自个儿权衡吧😕

五、坑

除了Zookeeper上的znode节点权限不会被清空,有时候,只是有时候,在禁用Kerberos的过程中,有的服务的配置压根就没有将Kerberos相关的配置移除掉,所以肯定会导致服务在禁用kerberos后启动失败。

我的做法是:打开Ambari面板上对应服务的配置项,右上角对配置进行搜索,搜索关键词kerberos,将设置为kerberos的相关选项删除按照Ambari提示进行更改,然后再重启该服务试试,应该就可以成功启动了。


长按下方二维码,关注更多精彩内容

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、思考
  • 二、禁用Kerberos
  • 三、修改znode权限
    • 1. md5加密超级管理员密码
      • 2. 编辑zkServer.sh
        • 3. 删除znode节点或修改znode权限
        • 四、总结
        • 五、坑
        相关产品与服务
        专用宿主机
        专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档