Ambari开启Kerberos安全认证
目录
一、术语简介
通俗易懂 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
相关文章
- 收不到github认证邮件
- Kubernetes安全专家认证 (CKS)考试动员
- 微服务架构统一安全认证设计与实践
- MongoDb单例安全认证
- 谷粒商城认证服务(三十三)
- PHP 模拟 HTTP 摘要认证(Digest )
- Apache 配置 Basic 认证
- 移动安全身份认证厂商及产品盘点
- ZeroMQ接口函数之 :zmq_curve – 安全的认证方式和保密方式
- 中国专利查询——国家知识产权局专利和集成电路布图设计业务办理统一身份认证平台
- 快速集成认证服务-HarmonyOS平台
- 【Codelabs挑战赛示例讲解1】核酸检测结果认证查询系统-认证登录
- PostgreSQL 使用 LDAP 认证方式
- 玩转spring boot——简单登录认证
- Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证
- MySQL协议-认证握手过程
- 蓝牙 - BQB认证测试
- 协鑫集成首创3000V组件获认证
- Ambari开启Kerberos安全认证
- 何谓云安全专家认证CCSP?