Zookeeper 开启kerberos配置
一. 前言
这两天需要搞一个开启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
文件. 文件内容如下:
注意keyTab
和principal
参数的配置.
[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 日志位置
主要用于问题定位&联调,
- kdc服务日志 : 默认
/var/log/krb5kdc.log
- server端日志: 默认 在
${ZOOKEEPER_HOME}\bin\zookeeper.out
文件中. - 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配置相关推荐
- Zookeeper集群安装(开启kerberos)
安装规划 zookeeper集群模式,安装到如下三台机器 10.43.159.237 zdh-237 10.43.159.238 zdh-238 10.43.159.239 zdh-239 Kerbe ...
- Zookeeper单机安装(开启kerberos)
安装规划 zookeeper安装到zdh41上面,单机模式 10.43.159.41 zdh41 ZDH.COM 安装用户 zookeeper/zdh1234 useradd -g hadoop -s ...
- Storm集群安装Version1.0.1开启Kerberos
Storm集群安装,基于版本1.0.1, 同时开启Kerberos安全认证, 使用apache-storm-1.0.1.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 ...
- cdh+dolphinscheduler开启kerberos
搭建环境 多台linux主机搭建集群+CDH 6.3.2 (Parcel)版本+dolphinscheduler 1.3.2版本 本流程在CDH已搭建完成并可正常使用后,开启kerberos功能 do ...
- 基于zookeeper实现分布式配置中心(二)
上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...
- Hadoop开启Kerberos安全模式
Hadoop开启Kerberos安全模式, 基于已经安装好的Hadoop的2.7.1环境, 在此基础上开启Kerberos安全模式. 1.安装规划 已经安装好Hadoop的环境 10.43.159.7 ...
- Sqoop2开启Kerberos安全模式
Sqoop2开启Kerberos安全模式, 基于版本sqoop-1.99.7, 在已经安装好的sqoop2环境上配置kerberos. 1.安装规划 10.43.159.9 zdh-9 sqoop2k ...
- Ranger-AdminServer安装(开启Kerberos)
Ranger-AdminServer安装, 同时开启Kerberos安全模式, 基于ranger版本0.7.0. 安装规划 10.43.159.240 zdh-240 10.43.159.245 zd ...
- 【安全】CDH集群开启Kerberos安全认证
文章目录 1.安装kerberos 2.CDH集群开启Kerberos安全认证 1.安装kerberos 参考:https://blog.csdn.net/qq_21383435/article/de ...
最新文章
- APT***的那些事
- linux java 权限不够_​Linux安装jdk时提示权限不够怎么解决
- [html] 说说你对短链接的理解,它有什么应用场景呢?
- linux mint 自动更新设置,如何升级到Linux Mint 19.1
- 【nodejs原理源码赏析(1)】Express中间件系统的基本实现
- 数组元素的查找,添加,修改,删除
- python | 高效统计语言模型kenlm:新词发现、分词、智能纠错
- 太强了!一个基于 Redis 的限流系统的设计!
- Integer的比较
- 20200812每日一句
- 8:PMS和软件安装的介绍-步入Linux的现代方法
- python 7-1 输出星期名缩写 (10分)
- 论文分享(一) CVPR 2018 Defense against Universal Adversarial Perturbations
- 域控可以改计算机用户名,如何修改ActiveDirectory域控制器计算机名称
- 地图定位技术揭秘(一)
- JSP与Servlet 基础知识
- wargame v2.1 Web Wrtteup By Assassin
- 为什么资源隔离对HTAP至关重要?
- ABAP SY-SUBRC的含义解析
- 周星馳 電影經典對白