kerberos mysql配置_CDH安装Kerberos (包含主从配置)

很多企业CDH是没有集成kerberos,原因是kerberos部署后,服务使用起来变复杂,大部分只配置了sentry做权限管理;但真正的CDH多租户应该是 身份验证 + 权限管理。也就是(kerberos + sentry)

接下来,我会图文介绍怎么安装这两个服务;

在实施方案前,假设

CDH已经运行正常;

之前安装了sentry服务先停掉

企业微信截图_20180606233117.png

正确的顺序应该是先kerberos然后sentry; 避免发生一些奇怪的错误

服务器root用户

注意点

首先centos5.6以上的系统,必须要替换几个文件 (每个节点都要)

1.下载 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File

2.下载文件是个zip包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security

policy.png

安装KDC和配置服务

KDC服务端

##执行命令

yum -y install krb5-server krb5-libs krb5-auth-dialog1 krb5-workstation

修改/etc/krb5.conf配置

vi /etc/krb5.conf

[logging]

default = FILE:/var/log/krb5libs.log

kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmind.log

[libdefaults]

default_realm = W.COM

dns_lookup_realm = false

dns_lookup_kdc = false

ticket_lifetime = 24h

renew_lifetime = 7d

forwardable = true

#注意的是node1是你kdc服务的主机host

#作用域一般一个集群配一个足矣

[realms]

W.COM = {

kdc = node1

admin_server = node1

}

[domain_realm]

.node1 = W.COM

node1 = W.COM

修改/var/kerberos/krb5kdc/kadm5.acl配置

vi /var/kerberos/krb5kdc/kadm5.acl

#/admin结尾的都是带有管理权限的principal

*/[email protected] *

修改/var/kerberos/krb5kdc/kdc.conf配置

#修改kdc.conf

vi /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]

kdc_ports = 88

kdc_tcp_ports = 88

[realms]

W.COM = {

#master_key_type = aes256-cts

max_renewable_life= 7d 0h 0m 0s

acl_file = /var/kerberos/krb5kdc/kadm5.acl

dict_file = /usr/share/dict/words

admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab

supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal

}

创建Kerberos数据库

kdb5_util create –r W.COM -s

# 密码默认为KERBEROS

创建Kerberos的管理账号

kadmin.local

#然后输入

addprinc admin/[email protected]

#管理员密码为:kerberos

#提示 created关键字之后,输入 exit退出

exit

将Kerberos服务添加到自启动服务,并启动krb5kdc和kadmin服务

chkconfig krb5kdc on

chkconfig kadmin on

service krb5kdc start

service kadmin start

参加一句,假如上述步骤做错了,配置文件配错了,不要犹豫;重新从头开始操作一次 (重头操作之前先把数据库删了 /var/kerberos/krb5kdc/下面的pricinpal文件和keytab文件)

测试kerberos管理员账号

kinit admin/[email protected]

#然后输入上两步设置的密码

klist

#显示类似下面东西表示正常

[root@node1 krb5kdc]# klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: admin/[email protected]

Valid starting Expires Service principal

05/31/18 17:14:34 06/01/18 17:14:34 krbtgt/[email protected]

renew until 06/07/18 17:14:34

其他子节点安装Kerberos客户端( 每个子节点都要 )

yum -y install krb5-libs krb5-workstation

在Cloudera Manager Server服务器上安装额外的包

#在kdc服务所在的机器

yum -y install openldap-clients

将KDC Server上的krb5.conf文件拷贝到所有Kerberos客户端

scp -r /etc/krb5.conf root@slave1:/etc/

scp -r /etc/krb5.conf root@slave2:/etc/

scp -r /etc/krb5.conf root@slave3:/etc/

以上就是配置KDC服务端和客户端步奏,下一步是CDH集成KDC

CDH启用Kerberos

#在KDC中给Cloudera Manager添加管理员账号

#在KDC服务所在的机器操作

kadmin.local

addprinc cloudera-scm/[email protected]

#密码:kerberos

创建完成后输入 exit 退出

exit

进入Cloudera Manager的“管理”-> “安全”界面

安全管理.png

继续

启用kerberos.png

继续

全选.png

继续,node1为安装KDC服务所在的机器host

KDC信息.png

继续

取消勾选.png

必须是刚才创建的Kerbers管理员账号,必须和之前创建的账号一致,继续

KDC凭据.png

继续

导入凭据.png

继续,每台机器每个服务都会生成唯一一个principal

kerberos主体.png

继续

配置端口.png

等待集群重启成功,点击“继续”

成功启用kerberos.png

至此已成功启用Kerberos。

启动过程后,impala daemon或者kudu报以下错

(SASL(-4): no mechanism available: No worthy mechs found)

在报错节点执行以下命令

yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi

一定要保证服务所在节点安装kerberos客户端,服务启动需要用到kinit

验证

登录KDC服务所在的机器

#执行

kadmin.local

#输入后回车

listprincs

#这时候会看到

kadmin.local: listprincs

HTTP/[email protected]

HTTP/[email protected]

HTTP/[email protected]

HTTP/[email protected]

K/[email protected]

admin/[email protected]

cloudera-scm/[email protected]

[email protected]

hbase/[email protected]

hbase/[email protected]

hbase/[email protected]

hbase/[email protected]

hdfs/[email protected]

hdfs/[email protected]

hdfs/[email protected]

hdfs/[email protected]

hive/[email protected]

hue/[email protected]

impala/[email protected]

impala/[email protected]

impala/[email protected]

impala/[email protected]

kadmin/[email protected]

kadmin/[email protected]

kadmin/[email protected]

kafka/[email protected]

kafka/[email protected]

kafka/[email protected]

kafka_mirror_maker/[email protected]

krbtgt/[email protected]

kudu/[email protected]

kudu/[email protected]

kudu/[email protected]

kudu/[email protected]

[email protected]

mapred/[email protected]

oozie/[email protected]

sentry/bi-mast

#上述principal是CDH集成kerberos生成的

访问服务(任意一个安装了kerberos客户端的节点)

之前我们没集成kerberos时候,访问hdfs操作如下

#通过切换hdfs用户达到具备访问hdfs目录权限

[root@bi-bdap-ue-001 ~]# su hdfs

[hdfs@bi-bdap-ue-001 root]$ hadoop fs -ls /user/hive/warehouse

Found 3 items

drwxrwx--x+ - hive hive 0 2018-04-20 14:09 /user/hive/warehouse/dm_wms.db

drwxrwx--x+ - hive hive 0 2018-03-15 17:13 /user/hive/warehouse/dw

drwxrwx--x+ - hive hive 0 2018-03-14 15:42 /user/hive/warehouse/wms.db

[hdfs@bi-bdap-ue-001 root]$ hadoop fs -ls /user/hive/warehouse/dw

Found 2 items

drwxrwx--x+ - hive hive 0 2018-05-25 17:37 /user/hive/warehouse/dw/dw_wms.db

drwxrwx--x+ - hive hive 0 2018-04-09 13:57 /user/hive/warehouse/dw/dw_wms_tmp.db

现在集成kerberos后,通过切换用户访问服务方式走不通

#就算切换成hdfs用户后依然没有权限访问hdfs

[root@node1 ~]# su hdfs

bash-4.1$ klist

klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_496)

bash-4.1$ hadoop fs -ls /user

18/06/07 00:55:31 WARN security.UserGroupInformation: PriviledgedActionException as:hdfs (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

18/06/07 00:55:31 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

18/06/07 00:55:31 WARN security.UserGroupInformation: PriviledgedActionException as:hdfs (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "node1/172.17.194.20"; destination host is: "node1":8020;

正确的方式是kinit 命令获得或更新 Kerberos 票据授权票据后访问服务

#现在服务只认票据

#而且相应的服务有相应的票据

[root@node1 1003-hdfs-NAMENODE]# kinit -kt hdfs.keytab hdfs/[email protected]

[root@node1 1003-hdfs-NAMENODE]# klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: hdfs/[email protected]

Valid starting Expires Service principal

06/07/18 01:00:55 06/08/18 01:00:55 krbtgt/[email protected]

renew until 06/12/18 01:00:55

[root@node1 1003-hdfs-NAMENODE]# hadoop fs -ls /user/hive/warehouse

Found 12 items

drwxrwx--x+ - hive hive 0 2018-05-24 19:01 /user/hive/warehouse/apache_sqoop_test

drwxrwx--x+ - hive hive 0 2018-06-06 15:13 /user/hive/warehouse/bi.db

drwxrwx--x+ - hive hive 0 2018-05-17 16:41 /user/hive/warehouse/gms.db

drwxrwx--x+ - hive hive 0 2018-06-04 14:08 /user/hive/warehouse/gtp.db

drwxrwx--x+ - hive hive 0 2018-05-25 20:43 /user/hive/warehouse/gtp_data.db

drwxrwx--x+ - hive hive 0 2018-06-01 17:15 /user/hive/warehouse/gtp_dc.db

drwxrwx--x+ - hive hive 0 2018-06-04 08:32 /user/hive/warehouse/gtp_test.db

drwxrwx--x+ - hive hive 0 2018-05-31 15:33 /user/hive/warehouse/gtp_txt.db

drwxrwx--x+ - hive hive 0 2018-04-23 17:46 /user/hive/warehouse/kudu_raw.db

drwxrwx--x+ - hive hive 0 2018-04-23 17:58 /user/hive/warehouse/kudu_test.db

drwxrwx--x+ - hive hive 0 2018-04-26 17:37 /user/hive/warehouse/kudu_vip.db

drwxrwx--x+ - hive hive 0 2018-04-20 10:51 /user/hive/warehouse/user_info

接下来,我会图文介绍怎么安装配置Kerberos高可用

首先明确一点,kerberos没有自带选举算法,账号数据需要自己手动写脚本定时从主节点dump到从节点

方案实施前,假设集群kerberos满足以下条件

1). 主kdc服务正常,kadmin正常

2). root操作用户

2). crontab调度工具可用正常

备节点安装Kerberos服务

yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation

注意:此处只安装服务,暂不做相应配置及启动服务。

主节点操作

修改/etc/krb5.conf配置文件,在realms下增加从Kerberos的配置

vi /etc/krb5.conf

kdc高可用.png

.将修改后的/etc/krb5.conf文件同步到集群的所有Kerberos客户端节点

scp /etc/krb5.conf root@slave1:/etc/

scp /etc/krb5.conf root@slave2:/etc/

scp /etc/krb5.conf root@slave3:/etc/

重启主节点的kdc服务

service krb5kdc restart

service kadmin restart

创建主从同步账号,并为账号生成keytab文件

kadmin.local

kadmin.local: addprinc -randkey host/node1

kadmin.local: addprinc -randkey host/slave1

kadmin.local:

kadmin.local: ktadd host/node1

kadmin.local: ktadd host/slave1

随机生成秘钥创建同步账号,并使用ktadd命令生成账号的keytab文件,文件默认生成在/etc/krb5.keytab下,多个账号则在krb5.keytab基础上追加

复制以下文件到从Kerberos服务器相应目录

scp /etc/krb5.conf root@slave1:/etc/

scp /etc/krb5.keytab root@slave1:/etc/

scp /var/kerberos/krb5kdc/.k5.W.COM root@slave1:/var/kerberos/krb5kdc/

scp /var/kerberos/krb5kdc/kadm5.acl root@slave1:/var/kerberos/krb5kdc/

scp /var/kerberos/krb5kdc/kdc.conf root@slave1: /var/kerberos/krb5kdc/

从节点操作

在/var/kerberos/krb5kdc/kpropd.acl配置文件中添加对应账户

[root@slave1 krb5kdc]# vi /var/kerberos/krb5kdc/kpropd.acl

host/[email protected]

host/[email protected]

:wq

从节点启动kpropd

kpropd –S

备节点上已经准备好数据传输

主节点操作

kdb5_util dump /var/kerberos/krb5kdc/master.dump

导出成功后生成master.dump和master.dump.dump_ok两个文件。

使用kprop命令将master.dump文件同步至从节点

kprop -f /var/kerberos/krb5kdc/master.dump -d -P 754 slave1

32768 bytes sent.

44358 bytes sent.

Database propagation to slave1: SUCCEEDED

从节点操作

查看dump过来的账号数据

[root@slave1 krb5kdc]# cd /var/kerberos/krb5kdc/

[root@slave1 krb5kdc]# ll

total 104

-rw------- 1 root root 44358 Jun 15 16:19 from_master

-rw------- 1 root root 22 Jun 14 12:10 kadm5.acl

-rw------- 1 root root 439 Jun 14 12:11 kdc.conf

-rw-r--r-- 1 root root 54 Jun 14 12:15 kpropd.acl

-rw------- 1 root root 40960 Jun 15 16:19 principal

-rw------- 1 root root 8192 Jun 15 16:19 principal.kadm5

-rw------- 1 root root 0 Jun 15 09:36 principal.kadm5.lock

-rw------- 1 root root 0 Jun 15 16:19 principal.ok

启动从节点

service krb5kdc start

#不用启动kadmin

这时候要是从节点KDC能正常启动,就没问题

KDC服务高可用验证

停掉主KDC,停掉从KDC

service krb5kdc stop

#可用不停kadmin,不影响验证

验证服务

hdfs_挂.png

hdfs挂掉

重启从节点KDC服务后, 验证 (service krb5kdc start)

注意服务使用前, 账号要重新kinit一次

重启从kdc效果.png

hdfs服务正常

impala节点.png

impala-shell服务正常

impala-jdbc正常.png

impala-jdbc正常,注意krb5.conf文件要及时更新

账号数据同步脚本

考虑到主节点新增的principal需要同步到从节点上,需要一个脚本定时同步数据过去

vi /var/kerberos/krb5kdc/kprop_sync.sh

#!/bin/bash

source /etc/profile

echo "开始dump数据库文件"

DUMP=/var/kerberos/krb5kdc/master.dump

PORT=754

SLAVE="slave1"

TIMESTAMP=`date`

echo "Start at $TIMESTAMP"

kdb5_util dump $DUMP

kprop -f $DUMP -d -P $PORT $SLAVE

:wq

定时任务

crontab -e

#每分钟同步一次

* * * * * sh /var/kerberos/krb5kdc/kprop_sync.sh > /var/kerberos/krb5kdc/lastupdate

:wq

完成后,会发现日志每分钟都在更新

日志更新文件.png

到此,KDC主从配置完成!

你可能感兴趣的:(kerberos,mysql配置)