一. 前言

这两天需要搞一个开启kerberos的zookeeper环境用于测试. 顺手记录一下.

二. 安装步骤

2.1 前置环境准备

JDK : jdk1.8
服务器 : CentOS 7.5
软件版本: zookeeper : 2.4.8
前置环境: kerberos 安装 参考文档

2.2 安装zookeeper

zookeeper安装我就不细说了, 先贴一个配置文件示例 , 后续的参数配置都是基于这个zoo.cfg配置文件的基础上进行修改.

  • zoo.cfg 配置
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/tools/zookeeper-3.4.8/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
  • 启动服务进行验证

进入ZK 目录 : cd ${ZOOKEEPER_HOME}/bin
服务端启动 : sh zkServer.sh start
客户端启动 : sh zkServer.sh -server master01:2181

确认可以正常访问之后, 进行如下操作.

2.3 设置kerberos账号.

kerberos账号我统一用的zookeeper用户做的服务端启动,服务端必须是zookeeper,否则启动的时候报错 !!!

申请指令& 导出keytab文件如下:

# 创建凭证
kadmin.local -q "addprinc -randkey zkcli/master01@EXAMPLE.COM "# 导出凭证对应的keytab文件
kadmin.local -q "xst  -k /opt/keytab/zkcli.keytab  zkcli/master01@EXAMPLE.COM "

2.4 设置krb5配置文件

  • 默认路径 /etc/krb5.conf , 主要是通过krb5.conf文件可以连接到kdc服务器.
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = EXAMPLE.COM
# default_ccache_name = KEYRING:persistent:%{uid}[realms]EXAMPLE.COM = {kdc = master01:88admin_server = master01:789}[domain_realm].example.com = EXAMPLE.COMexample.com = EXAMPLE.COM

2.5 创建java.env配置

${ZOOKEEPER_HOME}/conf目录下创建java.env文件. 文件内容如下:

export JVMFLAGS=" -Dsun.security.krb5.debug=true -Djava.security.auth.login.config=/opt/tools/zookeeper-3.4.8/conf/jaas.conf"
  • 这个文件是全局配置, 只能存在一份.
  • -Dsun.security.krb5.debug=true 这个参数是为了指定开启kerberos的调试. 生产环境建议去掉.
  • java.security.auth.login.config 是java的安全认证文件.

2.6 创建jaas.conf配置

${ZOOKEEPER_HOME}/conf目录下创建jaas.conf文件. 文件内容如下:

注意keyTabprincipal参数的配置.

[root@master01 conf]# more jaas.conf
Server {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truekeyTab="/opt/keytab/zookeeper.keytab"storeKey=trueuseTicketCache=falseprincipal="zookeeper/master01@EXAMPLE.COM";
};Client {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truekeyTab="/opt/keytab/zookeeper.keytab"storeKey=trueuseTicketCache=falseprincipal="zookeeper/master01@EXAMPLE.COM";
};

注意:

  • Server 代表服务端的配置. 安全起见, 正常部署客户端的时候不需要配置这个.
  • Client 代表client的配置,安全起见 , 正常不应该与Server配置在一起.

2.7 修改zoo.cfg 配置

增加几个参数 :


authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000

2.8. 启动服务

进入ZK 目录 : cd ${ZOOKEEPER_HOME}/bin
服务端启动 : sh zkServer.sh start
客户端启动 : sh zkCli.sh -server master01:2181 [一定要带主机名,否则报错!!! ]

2.9 日志位置

主要用于问题定位&联调,

  1. kdc服务日志 : 默认 /var/log/krb5kdc.log
  2. server端日志: 默认 在${ZOOKEEPER_HOME}\bin\zookeeper.out文件中.
  3. client端日志: 直接是在控制台输出的. 如果想看kerberos相关的信息, 查看 [2.5章节] 设置JVM参数 -Dsun.security.krb5.debug=true

三. 趟过的坑

3.1. zookeeper 必须以zookeeper用户启动…

配置jass.conf配置文件的时候, 服务端的凭证信息必须是zookeeper. 否则会出问题,比如 客户端验证不通过. !!!


Server {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truekeyTab="/opt/keytab/zookeeper.keytab"storeKey=trueuseTicketCache=falseprincipal="zookeeper/master01@EXAMPLE.COM";
};

3.2.zookeeper配置了kerberos之后,zkCli.sh 连接认证不通过

连接命令: zkCli.sh

  • 报错如下:
WatchedEvent state:SyncConnected type:None path:null
2017-08-21 10:11:42,054 [myid:] - ERROR [main-SendThread(localhost:2181):ZooKeeperSaslClient@308] - An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - LOOKING_UP_SERVER)]) occurred when evaluating Zookeeper Quorum Member's  received SASL token. Zookeeper Client will go to AUTH_FAILED state.
2017-08-21 10:11:42,054 [myid:] - ERROR [main-SendThread(localhost:2181):ClientCnxn$SendThread@1072] - SASL authentication with Zookeeper Quorum member failed: javax.security.sasl.SaslException: An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - LOOKING_UP_SERVER)]) occurred when evaluating Zookeeper Quorum Member's  received SASL token. Zookeeper Client will go to AUTH_FAILED state.
  • 终于在kdc的日志中显示的信息,如下
Aug 21 10:11:42 master krb5kdc[21935](info): TGS_REQ (6 etypes {18 17 16 23 1 3}) 192.168.1.144: LOOKING_UP_SERVER: authtime 0,  zkcli@EXAMPLE.COM for zookeeper/localhost@EXAMPLE.COM, Server not found in Kerberos database
  • 原因分析:
1、在zookeeper的认证请求中,zookeeper端的默认principall应该是zookeeper/<hostname>@<realm>
2、当采用zkCli.sh 的方式请求中,默认的host应该是localhost因此在kdc中才会发现客户端的请求和  zookeeper/localhost@EXAMPLE.COM 这个principal进行认证,但是在kerberos的database中却没有这个principal。
  • 解决方法:
    使用zkCli.sh -server host:port 访问。 同时zookeeper配置文件中sever部分的principal必须为zookeeper/@

注意: 服务端一定要以zookeeper用户的凭证进行启动. 否则client验证是不通过的!!!

参考:
https://zhangboyi.blog.csdn.net/article/details/115246149
https://developer.aliyun.com/article/25626
https://blog.51cto.com/1992zhong/1958018

Zookeeper 开启kerberos配置相关推荐

  1. Zookeeper集群安装(开启kerberos)

    安装规划 zookeeper集群模式,安装到如下三台机器 10.43.159.237 zdh-237 10.43.159.238 zdh-238 10.43.159.239 zdh-239 Kerbe ...

  2. Zookeeper单机安装(开启kerberos)

    安装规划 zookeeper安装到zdh41上面,单机模式 10.43.159.41 zdh41 ZDH.COM 安装用户 zookeeper/zdh1234 useradd -g hadoop -s ...

  3. Storm集群安装Version1.0.1开启Kerberos

    Storm集群安装,基于版本1.0.1, 同时开启Kerberos安全认证, 使用apache-storm-1.0.1.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 ...

  4. cdh+dolphinscheduler开启kerberos

    搭建环境 多台linux主机搭建集群+CDH 6.3.2 (Parcel)版本+dolphinscheduler 1.3.2版本 本流程在CDH已搭建完成并可正常使用后,开启kerberos功能 do ...

  5. 基于zookeeper实现分布式配置中心(二)

    上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...

  6. Hadoop开启Kerberos安全模式

    Hadoop开启Kerberos安全模式, 基于已经安装好的Hadoop的2.7.1环境, 在此基础上开启Kerberos安全模式. 1.安装规划 已经安装好Hadoop的环境 10.43.159.7 ...

  7. Sqoop2开启Kerberos安全模式

    Sqoop2开启Kerberos安全模式, 基于版本sqoop-1.99.7, 在已经安装好的sqoop2环境上配置kerberos. 1.安装规划 10.43.159.9 zdh-9 sqoop2k ...

  8. Ranger-AdminServer安装(开启Kerberos)

    Ranger-AdminServer安装, 同时开启Kerberos安全模式, 基于ranger版本0.7.0. 安装规划 10.43.159.240 zdh-240 10.43.159.245 zd ...

  9. 【安全】CDH集群开启Kerberos安全认证

    文章目录 1.安装kerberos 2.CDH集群开启Kerberos安全认证 1.安装kerberos 参考:https://blog.csdn.net/qq_21383435/article/de ...

最新文章

  1. APT***的那些事
  2. linux java 权限不够_​Linux安装jdk时提示权限不够怎么解决
  3. [html] 说说你对短链接的理解,它有什么应用场景呢?
  4. linux mint 自动更新设置,如何升级到Linux Mint 19.1
  5. 【nodejs原理源码赏析(1)】Express中间件系统的基本实现
  6. 数组元素的查找,添加,修改,删除
  7. python | 高效统计语言模型kenlm:新词发现、分词、智能纠错
  8. 太强了!一个基于 Redis 的限流系统的设计!
  9. Integer的比较
  10. 20200812每日一句
  11. 8:PMS和软件安装的介绍-步入Linux的现代方法
  12. python 7-1 输出星期名缩写 (10分)
  13. 论文分享(一) CVPR 2018 Defense against Universal Adversarial Perturbations
  14. 域控可以改计算机用户名,如何修改ActiveDirectory域控制器计算机名称
  15. 地图定位技术揭秘(一)
  16. JSP与Servlet 基础知识
  17. wargame v2.1 Web Wrtteup By Assassin
  18. 为什么资源隔离对HTAP至关重要?
  19. ABAP SY-SUBRC的含义解析
  20. 周星馳 電影經典對白

热门文章

  1. python应用-多线程下载海贼王漫画
  2. 基于MATLAB图像处理的pdf矫正
  3. MThings 下载地址 (支持以主机或从机方式进行MODBUS协议簇调试调测运维 工具 助手)
  4. windows 系统的copy命令
  5. 商业虚拟专用网络技术十一 MPLS转发
  6. 《摩尔庄园》公测突破200万,因何火出圈外?
  7. Spring boot中使用aop初了解
  8. 一元夺宝系统整体架构概览
  9. 县城外卖的市场有多大?实现田间外卖不是梦!这个市场值得一试!
  10. 基于纹理模型的空间自适应小波滤波实现