微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数据实战八十一:电商数仓六十五安全之Kerberos安全认证一概述与安装

1 Kerberos概述

 

1.1 什么是Kerberos

 

Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。

 

Kerberos不是k8s,Kubernetes简称k8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,跟我们今天学的Kerberos是两回事,大家切记一定不要搞混

 

1.2 Kerberos概念

 

Kerberos中有以下一些概念需要了解:

 

1)KDC:密钥分发中心,负责管理发放票据,记录授权。

 

2)Realm:Kerberos管理领域的标识。

 

3)principal:当每添加一个用户或服务的时候都需要向kdc添加一条principal,principl的形式为:主名称/实例名@领域名。

 

4)主名称:主名称可以是用户名或服务名,表示是用于提供各种网络服务(如hdfs,yarn,hive)的主体。

 

5)实例名:实例名简单理解为主机名。

 

关于 Kerberos 更多的原理讲解可参考以下链接

 

https://cloud.tencent.com/developer/article/1496451

1.3 Kerberos认证原理

 

 

2 Kerberos安装

 

2.1 server节点安装kerberos相关软件

[root@hadoop102 ~]# yum install -y krb5-server krb5-workstation krb5-libs

#查看结果

[root@hadoop102 ~]# rpm -qa | grep krb5

krb5-devel-1.15.1-37.el7_7.2.x86_64

krb5-server-1.15.1-37.el7_7.2.x86_64

krb5-workstation-1.15.1-37.el7_7.2.x86_64

krb5-libs-1.15.1-37.el7_7.2.x86_64

2.2 client节点安装

[root@hadoop103 ~]# yum install -y krb5-workstation krb5-libs

[root@hadoop104 ~]# yum install -y krb5-workstation krb5-libs

#查看结果

[root@hadoop103 ~]# rpm -qa | grep krb5

krb5-libs-1.15.1-37.el7_7.2.x86_64

krb5-devel-1.15.1-37.el7_7.2.x86_64

krb5-workstation-1.15.1-37.el7_7.2.x86_64

2.3 配置kerberos

需要配置的文件有两个为kdc.conf和krb5.conf , kdc配置只是需要Server服务节点配置,即hadoop102.

1) kdc配置

 

[root@hadoop102 ~]# vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 HADOOP.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
  max_life = 1d
  max_renewable_life = 7d
  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
 }

 

说明:

HADOOP.COM:realm名称,Kerberos支持多个realm,一般全用大写。

acl_file:admin的用户权。

admin_keytab:KDC进行校验的keytab。

supported_enctypes:支持的校验方式,注意把aes256-cts去掉,JAVA使用aes256-cts验证方式需要安装额外的jar包,所有这里不用。

2) krb5文件配置

[root@hadoop102 ~]# vim /etc/krb5.conf
includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
 default_realm = HADOOP.COM
 #default_ccache_name = KEYRING:persistent:%{uid}
 udp_preference_limit = 1
[realms]
 HADOOP.COM = {
  kdc = hadoop102
  admin_server = hadoop102
}

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

说明:

default_realm:认的realm,设置 Kerberos 应用程序的认领域,必须跟要配置的realm的名称一致。

ticket_lifetime:表明凭证生效的时限,一般为24小时。

renew_lifetime : 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。

udp_preference_limit= 1:禁止使用 udp,可以防止一个 Hadoop 中的错误

realms:配置使用的 realm,如果有多个领域,只需向 [realms] 节添加其他的语句。

domain_realm:集群域名与Kerberos realm的映射关系,单个realm的情况下,可忽略。

3)同步krb5到Client节点

 

[root@hadoop102 ~]# xsync /etc/krb5.conf

2.4 生成Kerberos数据库

在server节点执行

 

[root@hadoop102 ~]# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM',
master key name 'K/[email protected]'
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:(确认密码

 

创建完成后/var/kerberos/krb5kdc目录下会生成对应的文件

 

[root@hadoop102 ~]# ls /var/kerberos/krb5kdc/
kadm5.acl  kdc.conf  principal  principal.kadm5  principal.kadm5.lock  principal.ok

 

2.5 赋予Kerberos管理员所有权限

[root@hadoop102 ~]# vim /var/kerberos/krb5kdc/kadm5.acl
#修改为以下内容:
*/[email protected]      *

说明:

*/admin:admin实例的全部主体

@HADOOP.COM:realm

*:全部权限

这个授权的意思:就是授予admin实例的全部主体对应HADOOP.COM领域的全部权限。也就是创建Kerberos主体的时候如果实例为admin,就具有HADOOP.COM领域的全部权限,比如创建如下的主体user1/admin就拥有全部的HADOOP.COM领域的权限。

 

2.6 启动Kerberos服务

#启动krb5kdc
[root@hadoop102 ~]# systemctl start krb5kdc
正在启动 Kerberos 5 KDC:                                  [确定]

#启动kadmin
[root@hadoop102 ~]# systemctl start kadmin
正在启动 Kerberos 5 Admin Server:                         [确定]

#设置开机自启
[root@hadoop102 ~]# systemctl enable krb5kdc
#查看是否设置为开机自启
[root@hadoop102 ~]# systemctl is-enabled krb5kdc

[root@hadoop102 ~]# systemctl enable kadmin
#查看是否设置为开机自启
[root@hadoop102 ~]# systemctl is-enabled kadmin

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

 

2.7 创建管理员主体/实例

[root@hadoop102 ~]# kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/[email protected] with password.
WARNING: no policy specified for admin/[email protected]; defaulting to no policy
Enter password for principal "admin/[email protected]": (输入密码)
Re-enter password for principal "admin/[email protected]": (确认密码)
Principal "admin/[email protected]" created.

2.8 kinit管理员验证

[root@hadoop102 ~]# kinit admin/admin
Password for admin/[email protected]: (输入密码)
[root@hadoop102 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/[email protected]

Valid starting     Expires            Service principal
08/27/19 14:41:39  08/28/19 14:41:39  krbtgt/[email protected]
        renew until 08/27/19 14:41:39

出现以上红色admin/[email protected]说明没问题

在其他机器尝试:

[root@hadoop103 ~]# kinit admin/admin
Password for admin/[email protected]: (输入密码)

[root@hadoop103 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/[email protected]

Valid starting     Expires            Service principal
08/27/19 14:41:39  08/28/19 14:41:39  krbtgt/[email protected]
        renew until 08/27/19 14:41:39

如果出现:kadmin: GSS-API (or Kerberos) error while initializing kadmin interface,则重启ntp服务:

 

[root@hadoop103 ~]# service ntpd restart
关闭 ntpd:                                                [确定]
正在启动 ntpd:

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐