zl程序教程

您现在的位置是:首页 >  前端

当前栏目

Ambari开启Kerberos安全认证

认证安全 开启 Kerberos Ambari
2023-09-11 14:22:11 时间

目录

一、术语简介

二、安装

2.1、安装JCE

2.2、安装Kerberos  

三、Ambari 添加 kerberos 认证

四、常用命令

1、创建Kerberos 主体

2、修改主体密码

3、查看所有主体

 4、生成 keytab 秘钥文件

5、主体认证

6、使用 keytab 进行认证

7、销毁凭证


一、术语简介

 通俗易懂 Kerberos原理  https://blog.csdn.net/qq_35995514/article/details/106348765

                    术语                                                                   简介                                   
KDC(Key  Distribution  Center) 密钥分发中心,在启用Kerberos用于验证各个模块
Kerberos KDC Server KDC 所在的服务器
Kerberos Client任何一个需要通过KDC 认证的机器
Principal 用于验证一个用户或者一个Service 的唯一标识,相当于一个账号,需要为其设置密码
Keytab包含一个或多个Principal以及密码的文件
Relam由 KDC 以及多个 Kerberos Client 组成的网络
KDC Admin Account KDC 中拥有管理权限的账户(例如添加、修改、删除 Principal)
Authentication Server (AS)认证服务器,用于初始化认证
Ticket Granting Server (TGS)在 TGT 的基础上生成 Service Ticket。一般情况下 AS 和 TGS 都在 KDC 的 Server 上

 一个 User 或者一个 Service 会用 Principal 到 认证服务器(AS)认证,AS会返回一个用 Principal  Key 加密的 TGT(票据授权票据),这时候只有 AS 和 Principal 的使用者可以识别该TGT,User 或者 Service  会使用 Principal 的 Key 来解密 TGT, 并使用解密后的 TGT 去 TGS 获取 Service Ticket。在 Kerberos 认证的集群中,只有拿着这个 Service Ticket 才可以访问真正的 Server 从而实现自己的业务逻辑。一般我们将 TGT 的存放文件,称为 Kerberos Confidential 文件,默认的存放目录为/tmp,文件名则由 krb5cc 和用户的 id 组成,例如“/tmp/krb5cc_0”为 root 的 confidential 文件。

 

  • AS(Authentication Server)= 认证服务器

  • KDC(Key Distribution Center)= 密钥分发中心

  • TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据

  • TGS(Ticket Granting Server)= 票据授权服务器

  • SS(Service Server)= 特定服务提供端


二、安装

安装kerberos前,要确保主机名可以被解析,防火墙 和 Selinux 关闭。

 

       主机名                     内网IP           角色
       hdp01              10.168.138.188      master KDC  
       hdp02               192.168.60.20     kerberos client

2.1、安装JCE

对于Kerberos系统来说,默认使用的 AES-256来进行加密。在集群启用Kerberos之前,必须在Ambari集群上的每个节点上都装有JCE

重要:如果您使用的是Oracle JDK,则必须在群集中的所有主机上分发和安装JCE,包括Ambari Server。安装JCE后,请务必重新启动Ambari Server。如果您使用的是OpenJDK,OpenJDK的某些发行版会自动提供无限强度的JCE,因此不需要安装JCE

JCE与JDK版本是对应的,需要根据JDK的版本来选择JCE版本,下载JCE的zip包并解压到 $JAVA_HOME/jre/lib/security目录下。

 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

2.2、安装Kerberos  

server节点安装kerberos相关软件

[root@hdp01 security]#  yum install -y krb5-server krb5-workstation krb5-libs
                                   
[root@hdp01 security]# rpm -qa | krb5*
-bash: krb5*: command not found
[root@hdp01 security]# rpm -qa | grep krb5*
krb5-server-1.15.1-46.el7.x86_64
krb5-libs-1.15.1-46.el7.x86_64
krb5-workstation-1.15.1-46.el7.x86_64

client节点安装

yum install -y krb5-workstation krb5-libs

1) kdc配置


[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 WINNER.COM = {
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab  supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

 2) krb5文件配置

​
[root@hdp01 security]# vim /etc/krb5.conf


[libdefaults]
 # =======>此处的配置不能忘记
 default_realm = WINNER.COM
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 WINNER.COM = {
    kdc = 10.168.138.188
    admin_server = 10.168.138.188
 }
# EXAMPLE.COM = {
#  kdc = kerberos.example.com
#  admin_server = kerberos.example.com
# }

[domain_realm]
 .example = WINNER.COM
  example = WINNER.COM
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM

说明:

  • default_realm:默认的realm,设置 Kerberos 应用程序的默认领域,必须跟要配置的realm的名称一致。如果有多个领域,只需向 [realms] 节添加其他的语句。
  • ticket_lifetime:表明凭证生效的时限,一般为24小时。
  • renew_lifetime : 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
  • [realms]:列举使用的 realm。

 3)同步krb5到Client节点

[root@hdp01 security]# scp -r /etc/krb5.conf hdp02:/etc/

4)生成Kerberos数据库

在server节点执行

[root@hdp01 security]# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'WINNER.COM',
master key name 'K/M@WINNER.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: 
Re-enter KDC database master key to verify: 


5)创建管理员主体/实例  

[root@hdp01 security]# kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/admin@WINNER.COM with password.
WARNING: no policy specified for admin/admin@WINNER.COM; defaulting to no policy
Enter password for principal "admin/admin@WINNER.COM": 123456
Re-enter password for principal "admin/admin@WINNER.COM": 123456
Principal "admin/admin@WINNER.COM" created.


#  给管理员实例的所有主体授权
[root@hdp01 security]# vim /var/kerberos/krb5kdc/kadm5.acl
[root@hdp01 security]# cat /var/kerberos/krb5kdc/kadm5.acl 
*/admin@WINNER.COM	*
[root@hdp01 security]# 

说明:

  • * : 全部的主体
  • /admin : admin 实例
  • @WINNER.COM  : 领域
  • 最后的 * : 全部的权限

此授权的意思:就是授予 admin 实例的全部主体对应 WINNER.COM  领域的全部权限

也就是 创建 Kerberos 主体的时候如果实例为 admin , 就具有 WINNER.COM 领域的全部权限,比如创建user1/admin 就拥有全部的 WINNER.COM 领域的权限。

6)启动服务

[root@hdp01 security]# systemctl start krb5kdc
[root@hdp01 security]# systemctl start kadmin

注意:启动失败时可以通过/var/log/krb5kdc.log和/var/log/kadmind.log来查看。

7)kinit管理员验证

三、Ambari 添加 kerberos 认证

1)启用 Kerberos

2)选择 MIT KDC 

注意:KDC host和Kadmin host一定要填写hostname,否则kerberos会提示找不到kadmin/manager.bigdata@HADOOP.COM这个principal。

 3)KDC配置

4)Kerberos Client 安装

 

后面就是全部服务的启动,并且 Kerberos 会为每个组件创建 Principal 和 Keytab ,可以在 KDC 数据库中查看。

参考阅读:

四、常用命令

service节点登录:

[root@hdp201 mysql]# kadmin.local

Authenticating as principal admin/admin@WINNER.COM with password.

kadmin.local:  exit

1、创建Kerberos 主体

[root@hdp201 mysql]# kadmin.local -q "addprinc kang"

Authenticating as principal admin/admin@WINNER.COM with password.

WARNING: no policy specified for kang@WINNER.COM; defaulting to no policy

Enter password for principal "kang@WINNER.COM":   L1234567

Re-enter password for principal "kang@WINNER.COM": L1234567

Principal "kang@WINNER.COM" created.

2、修改主体密码

[root@hdp201 mysql]# kadmin.local -q "cpw kang"

Authenticating as principal admin/admin@WINNER.COM with password.

Enter password for principal "kang@WINNER.COM":

Re-enter password for principal "kang@WINNER.COM":

Password for "kang@WINNER.COM" changed.

3、查看所有主体

[root@hdp201 mysql]# kadmin.local -q "list_principals"

Authenticating as principal admin/admin@WINNER.COM with password.

K/M@WINNER.COM

admin/admin@WINNER.COM

kang@WINNER.COM

kiprop/hdp201@WINNER.COM

krbtgt/WINNER.COM@WINNER.COM

 4、生成 keytab 秘钥文件

 

生成主体kang 的keytab 文件到指定目录 ,默认路径 :  /etc/security/keytabs, 放在默认路径下就可以

[root@hdp201 ambari-server]# kadmin.local -q  "xst -k /hadoop/hdp/kerberos/keytab/kang.keytab kang@WINNER.COM"

Authenticating as principal admin/admin@WINNER.COM with password.

Entry for principal kang@WINNER.COM with kvno 3, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

Entry for principal kang@WINNER.COM with kvno 3, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

Entry for principal kang@WINNER.COM with kvno 3, encryption type des3-cbc-sha1 added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

Entry for principal kang@WINNER.COM with kvno 3, encryption type arcfour-hmac added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

Entry for principal kang@WINNER.COM with kvno 3, encryption type camellia256-cts-cmac added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

Entry for principal kang@WINNER.COM with kvno 3, encryption type camellia128-cts-cmac added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

Entry for principal kang@WINNER.COM with kvno 3, encryption type des-hmac-sha1 added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

Entry for principal kang@WINNER.COM with kvno 3, encryption type des-cbc-md5 added to keytab WRFILE:/hadoop/hdp/kerberos/keytab/kang.keytab.

5、主体认证

 使用 kinit 进行主体认证

​
[root@hdp201 ambari-server]# kinit kangll

Password for kangll@WINNER.COM:

 

查看认证凭证

​
[root@hdp201 ambari-server]# klist

Ticket cache: KEYRING:persistent:0:0

Default principal: kangll@WINNER.COM



Valid starting       Expires              Service principal

06/13/2020 17:38:31  06/14/2020 17:38:31  krbtgt/WINNER.COM@WINNER.COM

​
 

6、使用 keytab 进行认证

[root@hdp201 ambari-server]# kinit -kt /hadoop/hdp/kerberos/keytab/kang.keytab kang

[root@hdp201 ambari-server]# klist

Ticket cache: KEYRING:persistent:0:krb_ccache_ttSlgTj

Default principal: kang@WINNER.COM



Valid starting       Expires              Service principal

06/13/2020 17:43:19  06/14/2020 17:43:19  krbtgt/WINNER.COM@WINNER.COM

7、销毁凭证

[root@hdp201 ambari-server]# kdestroy

Other credential caches present, use -A to destroy all

[root@hdp201 ambari-server]# klist

klist: Credentials cache keyring 'persistent:0:krb_ccache_ttSlgTj' not found

 

CDH| 安全之Kerberos安全认证 :https://www.cnblogs.com/shengyang17/p/12640140.html

基于ambari的Kerberos安装配置: https://mp.weixin.qq.com/s?__biz=MzU3MTc1NzU0Mg==&mid=2247483795&idx=1&sn=0645cf91998999c5500a1a777d44a954&chksm=fcda071acbad8e0cf8ecd3553a6349805dd1e0f1f4a4ecd50f4d9bccc679455da436c883516f&scene=21#wechat_redirect

基于Ambari禁用Kerberos: https://mp.weixin.qq.com/s?__biz=MzU3MTc1NzU0Mg==&mid=2247483861&idx=1&sn=6c59c59cde11947ea0536f10537d716b&chksm=fcda075ccbad8e4a4bbe96b5db8cabb8855f24aee127c0b9cff4998ce896646f7fc5c48c2e9d&scene=21#wechat_redirect