首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于 IBM BigInsights 的 Hadoop Kerberos 实践-1

基于 IBM BigInsights 的 Hadoop Kerberos 实践-1

什么是 KerberosKerberos 是希腊神话的一个多头的地狱犬,守卫地狱之门。Kerberos                另一个解释是麻省理工学院实验室开发的第三方用户认证机制,并逐渐成为计算机系统的安全认证标准。
为什么 Hadoop 集群需要 Kerberos 呢?其原因是 Hadoop                的默认身份验证是信任你给的用户名,并确保整个集群中的每一台机器相信这一点。Hadoop 是为了存储 PB                甚至更多规模的海量数据,简单信任会给企业客户造成安全问题。引入 Kerberos,可以通过有效地验证用户的合法性。
简单而言,Kerberos 完成以下任务:
  • 认证协议
  • 使用票证 Ticket 进行身份验证
  • 避免本地存储密码或网络发送
  • 引入可信任的第三方
Kerberos 主要术语的意义如下:
  • Principal:在 Kerberos 的身份。任何参与 Kerberos 身份验证协议的用户和服务都需要唯一标识。Principal                    分为两类:用户 Principal 和服务 Principal。User principal name (UPN) 表示用户,Service                    principal name (SPN) 表示服务。
  • Realm:认证管理域。Principal 被分配到特定的 Realm。Realm 建立了边界,这使得管理更容易。按照惯例,Realm                    名称总是大写。
  • Ticket 或 Ticket Granting Ticket (TGT):Ticket                    票证是客户端呈现给服务器以证明其身份的真实性。Ticket由认证服务器发行,并使用密钥进行加密,限制有限的使用时间。
  • Key Distribution Center (KDC):储存和分发 Ticket 的 Kerberos 认证服务器。KDC 是由三个部分组成:
    • Kerberos 数据库。Kerberos 数据库中存储所有关于 Principal 和 Realm 的信息。在数据库中的Kerberos主体识别用的命名约定举例如下:
      • 是 UPN 用户标识,alice 的域是                                    EXAMPLE.COM。
      • 是UPN 用户标识,管理员 bob 的域是                                    EXAMPLE.COM。斜杠 / 分割开名字和角色。
      • 是 SPN                                    服务标识,hdfs 服务在主机 node1.example.com,域是 EXAMPLE.COM,斜杠 /                                    分割开名称和主机。
    • 身份验证服务 Authentication Server (AS):负责发放票证授予票证 TGT 到客户端
    • 票证授予服务 Ticket Granting Server (TGS):负责验证 TGT 和授予服务票证。
创建自己的 Kerberos 服务首先要搭建 Kerberos 服务器,比如使用 MIT Kerberos Server bundled for Redhat、Heimdal                Kerberos Server for SuSE 或者 IBM Tivoli Directory Server。这里使用 Redhat 服务器中带的                MIT Kerberos Server,通常称为 MIT Kerberos V5 或者简称 krb5。
可以用一台独立服务器或者选择 Hadoop 集群的一个节点来安装 Kerberos 服务器 KDC,这里选择 IBM BigInsights                的第一个节点来安装Kerberos 服务器和客户端,主机名是 bi01.ibm.com,安装方法是:yum install -y                krb5-server krb5-libs krb5-auth-dialog krb5-workstation                pam_krb5。如果出现依赖包版本问题,可以先装 krb5-server,再装其他包。
修改 Kerberos 的配置文件 /etc/krb5.conf,一般只需要修改                [libdefaults].default_realm、[realms] 和 [domain_realm]。
  • [libdefaults] 包含一般默认的配置信息。default_realm 定义缺省的 Kerberos 认证管理域,在没有指定                    Kerberos认证管理域时则使用 default_realm。比如这里把 default_realm 改为                    IBM.COM。ticket_lifetime 规定 ticket 多长时间持续,缺省值为 24 小时。renew_lifetime 规定                    ticket 可以续签而无需重新认证的时间,缺省是 7 天。ticket_lifetime 和 renew_lifetime                    按照缺省值就可以,但由于 Hadoop 集群可能会有长时间的作业运行,在实际生产部署可以根据需要改成比较大的值。
  • [realms] 列出了 Kerberos 的所有认证管理域,KDC 和 ADMIN_SERVER 的配置告诉哪个服务器分别运行 KDC 和                    kadmin 的服务。比如这里改成 KDC 安装节点 bi01.ibm.com。
  • [domain_realm] 映射 DNS 名称和 Kerberos认证管理域。第一个条目修改为把 ibm.com 的所有主机映射到                    IBM.COM 认证管理域。第二项个条目修改为 ibm.com 本身映射到 IBM.COM                    认证管理域。如果未找到匹配的条目,客户端将尝试使用 DNS 名称的域部分(全部转换为大写)作为Kerberos认证管理域名。
清单 1. Kerberos 配置文件                    krb5.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = IBM.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true

[realms]
IBM.COM = {
  kdc = bi01.ibm.com
  admin_server = bi01.ibm.com
}

[domain_realm]
.ibm.com = IBM.COM
ibm.com = IBM.COM




创建 Kerberos 数据库的命令是 kdb5_util create -s,需要指定 KDC database master key。
修改 /var/kerberos/krb5kdc/kadm5.acl,这是用于控制哪些用户有特权访问管理 Kerberos 数据库。这里修改为                IBM.COM 认证管理域 admin/admin 的身份可执行任何管理操作。
清单 2. Kerberos 配置文件                    kadm5.acl
1
admin/admin@IBM.COM     *




接下来可以使用 kadmin 工具来添加管理员 admin/admin,这里使用在当前服务器 bi01.ibm.com 运行                kadmin.local。添加的命令是 addprinc,查看的命令是 getprinc,常用的还有删除 delprinc,列出所有                listprincs。
清单 3. 用 kadmin                工具添加管理员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@bi01 ~]#kadmin.local
Authenticating as principal root/admin@IBM.COM with password.
kadmin.local: addprinc admin/admin@IBM.COM
WARNING: no policy specified for admin/admin@IBM.COM; defaulting to no policy
Enter password for principal "admin/admin@IBM.COM":
Re-enter password for principal "admin/admin@IBM.COM":
Principal "admin/admin@IBM.COM" created.
kadmin.local: getprinc admin/admin@IBM.COM
Principal: admin/admin@IBM.COM
Expiration date: [never]
Last password change: Thu Jun 30 16:50:00 CST 2016
Password expiration date: [none]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 0 days 00:00:00
Last modified: Thu Jun 30 16:50:00 CST 2016 (root/admin@IBM.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 4
admin/admin@IBM.COM     *
Key: vno 1, aes256-cts-hmac-sha1-96, no salt
Key: vno 1, aes128-cts-hmac-sha1-96, no salt
Key: vno 1, des3-cbc-sha1, no salt
Key: vno 1, arcfour-hmac, no salt
MKey: vno 1
Attributes:
Policy: [none]




准备工作完成后就可以启动 Kerberos 服务 krb5kdc 和 kadmin,同时通过 chkconfig 命令设置 Kerberos                服务开机自动启动。
清单 4. 启动 Kerberos                服务
1
2
3
4
5
6
[root@bi01 ~]# /etc/rc.d/init.d/krb5kdc start
正在启动 Kerberos 5 KDC:                                  [确定]
[root@bi01 ~]# /etc/rc.d/init.d/kadmin start
正在启动 Kerberos 5 Admin Server:                         [确定]
[root@bi01 ~]# chkconfig krb5kdc on
[root@bi01 ~]# chkconfig kadmin on




kinit 工具允许用户显式地标识 Principal 进行验证,这里使用管理员 admin/admin 进行身份验证。klist                工具可以查看验证后的 Kerberos 认证信息。
清单 5. 验证 Kerberos                服务
1
2
3
4
5
6
7
8
[root@bi01 ~]# kinit admin/admin@IBM.COM
Password for admin/admin@IBM.COM:
[root@bi01 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@IBM.COM
Valid starting     Expires            Service principal
06/30/16 17:29:15  07/01/16 17:29:15  krbtgt/IBM.COM@IBM.COM
    renew until 06/30/16 17:29:15




Hadoop 集群的其他节点需要安装 Kerberos 客户端,假设是 IBM BigInsights 的六个节点集群,bi01.ibm.com                已经安装了 Kerberos 服务器和客户端,则 bi02.ibm.com 到 bi06.ibm.com 的其他五个节点都还需要安装                Kerberos 客户端,安装方法是:yum install -y krb5-workstation krb5-libs                pam_krb5。如果出现依赖包版本问题,可以先装 krb5-workstation,再装其他包。
在 IBM BigInsights 中启用 KerberosIBM Biginsights 是业界领先的 Hadoop 企业级发行版本,在世界著名 IT 行业独立研究公司 Forrester 从 2012 年到                2016 年发布的三次 Hadoop 解决方案的评测报告中,IBM BigInsights 一直处于领导者位置。IBM BigInsights 以                Apache Hadoop 及其相关开源项目作为核心组件,并在 Hadoop 开源框架的基础上进行了大量的企业化增强。
IBM BigInsights 采用 Ambari 分发和管理 Kerberos 配置,自动创建、生成和分发身份验证。首先登陆到 IBM                BigInsights 的管理控制台 Ambari,管理员的缺省用户名和密码是admin / admin。
图 1. 登陆到管理控制台                    Ambari成功登陆以后,会进入到集群仪表盘中,可以看到整个 Hadoop 集群的状况。选择 Admin 标签下的 Kerberos,然后点击 Enable                Kerberos。
图 2. 进入 Kerberos                    配置图 3. 启用                    Kerberos选择使用的 KDC的类型,并确认满足先决条件。前面已经配置过 Redhat 服务器中带的 MIT Kerberos Server,因此选择                Existing MIT KDC。在先决条件的最后一项可以看到,需要保证所有节点都已经安装过 Java Cryptography                Extensions (JCE),这点非常重要。IBM Biginsights 4 版本都会在安装时候使用 JDK 1.8,JCE 会包含在里面。以                BigInsights 4.1 为例,JCE 的两个包 local_policy.jar 和 US_export_policy.jar 会在                /usr/jdk64/java-1.8.0-openjdk-1.8.0.45-28.b13.el6_6.x86_64/jre/lib/security/                目录下。如果没有找到则需要手动拷贝这两个包,然后重启 Ambari 服务。
返回列表