文章目录

  • 1.集群环境
  • 2.搭建KDC Master服务
  • 2.1 编辑配置文件/etc/krb5.conf
  • 2.2 编辑配置文件/var/kerberos/krb5kdc/kdc.conf
  • 2.3 修改配置文件/var/kerberos/krb5kdc/kadm5.acl
  • 2.4 初始化数据库
  • 2.5 初始化KDC超级管理员
  • 2.6 启动KDC服务
  • 2.7 启动Kerberos服务
  • 3.搭建KDC Slave服务
  • 3.1 配置文件
  • 3.2 创建host/_HOST用户
  • 3.3 在KDC Slave节点上编辑
  • 3.4 在KDC Slave节点上初始化数据库
  • 3.5 在KDC Slave节点启动kpropd
  • 4.KDC主从同步设置
  • 5.Ambari启动Kerberos认证


1.集群环境

IP

Hostname

KDC

192.168.120.241

manager.bigdata

master

192.168.120.242

master.bigdata

slave

192.168.120.243

worker.bigdata

  • Kerberos是一种网络身份认证协议。它旨在通过使用秘密密钥加密为客户端/服务器应用程序提供强身份验证。
  • Kerberos KDC安装采用主从模式,主库master必须位于manager.bigdata上,从库slave位于master.bigdata上。
  • 如果kerberos只想搭建一个master节点,只需要参考 2.搭建KDC Master服务 即可。

2.搭建KDC Master服务

  • 在manager.bigdata节点操作,该节点作为KDC 主节点(master节点),以下操作,如果不特别说明,都是在manager.bigdata节点操作

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

2.1 编辑配置文件/etc/krb5.conf

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

[logging]
 # kerberos守护进程日志存储位置。
 default = FILE:/var/log/krb5libs.log		:默认krb5libs.log日志文件存放路径
 kdc = FILE:/var/log/krb5kdc.log			:默认krb5kdc.log日志文件存放路径
 admin_server = FILE:/var/log/kadmind.log	:默认kadmind.log日志文件存放路径

[libdefaults]
 # Kerberos使用的默认值,当进行身份验证而未指定Kerberos域时,则使用default_realm参数指定的Kerberos域。
 # 即每种连接的默认配置,需要注意以下几个关键的配置:
 default_realm = BIGDATA	:设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。
 							:其中BIGDATA可以为任意名字,推荐为大写。必须跟要配置的realm的名称一致。
 dns_lookup_realm = false	:DNS查找域名,可以理解为DNS的正向解析,该功能需要进一步验证,默认禁用。
 ticket_lifetime = 1d		:凭证生效的时限,设置为1天。
 renew_lifetime = 7d		:凭证最长可以被延期的时限,一般为7天。当凭证过期之后,对安全认证的服务的后续访问则会失败。
 forwardable = true			:如果此参数被设置为true,则可以转发票据,这意味着如果具有TGT的用户登陆到远程系统,
							:则KDC可以颁发新的TGT,而不需要用户再次进行身份验证。
 rdns = false				:理解是和dns_lookup_realm相反,即反向解析技术,该功能需要进一步验证,默认禁用即可。 
 default_ccache_name = KEYRING:persistent:%{uid}	:默认的缓存名称,不推荐使用该参数。

 pkinit_anchors             :在KDC中配置pkinit的位置,该参数的需要进一步验证。
 renewable                  :是否允许票据延迟

[realms]
 # 域特定的信息,例如域的Kerberos服务器的位置。可能有几个,每个域一个。
 # 可以为KDC和管理服务器指定一个端口。如果没有配置,则KDC使用端口88,管理服务器使用749。
 BIGDATA = { 
  admin_server = manager.bigdata	:代表admin的位置。格式是 机器:端口
  kdc = manager.bigdata		:代表要KDC的位置。格式是 机器:端口
  kdc = master.bigdata		:代表要KDC的位置。格式是 机器:端口
  
  default_domain            :顾名思义,指定默认的域名。
 }

[domain_realm]
 # 指定DNS域名和Kerberos域名之间映射关系。
 # 指定服务器的FQDN,对应的domain_realm值决定了主机所属的域。
 .bigdata = BIGDATA
[kdc]:
 # kdc的配置信息。即指定kdc.conf的位置。
 # profile               	:kdc的配置文件路径,默认值下若无文件则需要创建。

2.2 编辑配置文件/var/kerberos/krb5kdc/kdc.conf

[root@manager ~]# vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 # 该部分包含在此文件中列出的所有通用的配置
 kdc_ports = 88		:指定KDC的默认端口
 kdc_tcp_ports = 88	:指定KDC的TCP协议默认端口

[realms]
 BIGDATA = {
  #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 = aes256-cts:normal 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
  max_life = 1d
  max_renewable_life = 7d
  default_principal_flags = +renewable, +forwardable
 }

[realms]
 # 该部分列出每个领域的配置。
 # BIGDATA				: 是设定的 realms。名字随意,推荐为大写!,但须与/etc/krb5.conf保持一致。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感。
 # master_key_type		: 默认为禁用,但如果需要256为加密,则可以下载Java加密扩展(JCE)并安装。禁用此参数时,默认使用128位加密。
 # acl_file				: 标注了 admin 的用户权限的文件,若文件不存在,需要用户自己创建。即该参数允许为具有对Kerberos数据库的管理访问权限的UPN指定ACL。
 # dict_file			:  该参数指向包含潜在可猜测或可破解密码的文件。
 # admin_keytab			: KDC 进行校验的 keytab。
 # supported_enctypes	: 指定此KDC支持的各种加密类型。
 # max_life				:  该参数指定如果指定为1天。这是票据的最长存活时间。
 # max_renewable_life	:  该参数指定在多长时间内可重获取票据。

2.3 修改配置文件/var/kerberos/krb5kdc/kadm5.acl

[root@manager ~]# vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@BIGDATA *

# 指定*/admin@BIGDATA 用户为管理员用户!拥有全部权限,注意这个通配符“*”。
# 上述参数只有两列,第一列为用户名,第二列为权限分配。
# 文件格式是:Kerberos_principal permissions [target_principal] [restrictions],下面是对上面的文件编写参数说明。
# */admin@BIGDATA 	:表示以"/admin@BIGDATA "结尾的用户。
# *					:表示UNP可以执行任何操作,因为权限为所有权限,因此第二个“*”和第一个“*”区别。

2.4 初始化数据库

kdb5_util create -s -r BIGDATA

  • 注意,-s选项指定将数据库的主节点密钥存储在文件中,从而可以在每次启动KDC时自动重新生成主节点密钥。记住主密钥,稍后会使用。
  • 这里需要输入一个管理KDC数据库的密码!千万别忘记了,忘记的话就只能重新初始化KDC数据库啦!
  • 如果遇到数据库已经存在的提示,可以把/var/kerberos/krb5kdc/目录下的principal的相关文件都删除掉。默认的数据库名字都是principal(rm -f /var/kerberos/krb5kdc/principal*)。可以使用-d指定数据库名字。
[root@manager ~]# kdb5_util create -s -r BIGDATA
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'BIGDATA',
master key name 'K/M@BIGDATA'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: 			:KDC数据库密码一定要记住
Re-enter KDC database master key to verify:

ambari停止后 hdfs会停止吗 ambari启动_ambari停止后 hdfs会停止吗

  • 当我们创建Kerberos数据库成功后,默认会在该目录下创建以下5个文件。
ll -a /var/kerberos/krb5kdc/

.k5.BIGDATA				:存储文件k5.BIGDATA,默认是隐藏文件
kadm5.acl				:定义管理员权限的配置文件
kdc.conf				:KDC的主配置文件
principal				:Kerberos数据库文件
principal.kadm5			:Kerberos数据库管理文件
principal.kadm5.lock	:数据库锁管理文件
principal.ok			:Kerberos数据库文件

ambari停止后 hdfs会停止吗 ambari启动_数据库_02

2.5 初始化KDC超级管理员

kadmin.local -q "addprinc admin/admin@BIGDATA"

  • 根据提示设置KDC管理员密码,一定要记住
  • admin/admin:为管理员账户
  • BIGDATA:为手动配置的realm
[root@manager ~]# kadmin.local -q "addprinc admin/admin@BIGDATA"
Authenticating as principal root/admin@BIGDATA with password.
WARNING: no policy specified for admin/admin@BIGDATA; defaulting to no policy
Enter password for principal "admin/admin@BIGDATA": 
Re-enter password for principal "admin/admin@BIGDATA": 
Principal "admin/admin@BIGDATA" created.

2.6 启动KDC服务

systemctl start krb5kdc.service :启动kdc服务
systemctl status krb5kdc.service :查看kdc服务状态
systemctl enable krb5kdc.service :设置kdc开启启动
systemctl is-enabled krb5kdc.service :查看kdc开机启动是否设置成功

[root@manager ~]# systemctl start krb5kdc.service 
[root@manager ~]# systemctl status krb5kdc.service
● krb5kdc.service - Kerberos 5 KDC
   Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-10-29 22:42:38 CST; 2s ago
  Process: 18977 ExecStart=/usr/sbin/krb5kdc -P /var/run/krb5kdc.pid $KRB5KDC_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 18979 (krb5kdc)
   CGroup: /system.slice/krb5kdc.service
           └─18979 /usr/sbin/krb5kdc -P /var/run/krb5kdc.pid

Oct 29 22:42:38 manager.bigdata systemd[1]: Starting Kerberos 5 KDC...
Oct 29 22:42:38 manager.bigdata systemd[1]: Started Kerberos 5 KDC.
[root@manager ~]# systemctl enable krb5kdc.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/krb5kdc.service to /usr/lib/systemd/system/krb5kdc.service.
[root@manager ~]# systemctl is-enabled krb5kdc.service 
enabled
[root@manager ~]#

ambari停止后 hdfs会停止吗 ambari启动_配置文件_03

2.7 启动Kerberos服务

systemctl start kadmin.service :启动kadmin服务
systemctl status kadmin.service :查看kadmin服务状态
systemctl enable kadmin.service :设置kadmin开启启动
systemctl is-enabled kadmin.service :查看kadmin开机启动是否设置成功

[root@manager ~]# systemctl start kadmin.service 
[root@manager ~]# systemctl status kadmin.service 
● kadmin.service - Kerberos 5 Password-changing and Administration
   Loaded: loaded (/usr/lib/systemd/system/kadmin.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-10-29 22:46:48 CST; 1s ago
  Process: 21908 ExecStart=/usr/sbin/_kadmind -P /var/run/kadmind.pid $KADMIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 21909 (kadmind)
   CGroup: /system.slice/kadmin.service
           └─21909 /usr/sbin/kadmind -P /var/run/kadmind.pid

Oct 29 22:46:48 manager.bigdata systemd[1]: Starting Kerberos 5 Password-changing and Administration...
Oct 29 22:46:48 manager.bigdata systemd[1]: Started Kerberos 5 Password-changing and Administration.
[root@manager ~]# systemctl enable kadmin.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kadmin.service to /usr/lib/systemd/system/kadmin.service.
[root@manager ~]# systemctl is-enabled kadmin.service 
enabled
[root@manager ~]#

ambari停止后 hdfs会停止吗 ambari启动_ambari停止后 hdfs会停止吗_04

3.搭建KDC Slave服务

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

3.1 配置文件

  • 登录KDC Master节点,复制KDC Master节点上的配置文件到KDC Slave
[root@manager ~]# scp /etc/krb5.conf root@master.bigdata:/etc/
[root@manager ~]# scp /var/kerberos/krb5kdc/kdc.conf root@master.bigdata:/var/kerberos/krb5kdc/
[root@manager ~]# scp /var/kerberos/krb5kdc/kadm5.acl root@master.bigdata:/var/kerberos/krb5kdc/

ambari停止后 hdfs会停止吗 ambari启动_数据库_05

3.2 创建host/_HOST用户

  • 登录KDC Master节点,输入命令kadmin.local进入交互界面:
[root@manager ~]# kadmin.local
kadmin.local:  add_principal -randkey host/manager.bigdata
kadmin.local:  ktadd host/manager.bigdata
kadmin.local:  quit

ambari停止后 hdfs会停止吗 ambari启动_ambari停止后 hdfs会停止吗_06

  • 在KDC Slave节点执行命令:kadmin -p admin/admin@BIGDATA -r BIGDATA
  • 根据提示输入超级管理员admin/admin密码,进入kadmin
  • 执行下列命令:
[root@master ~]# kadmin -p admin/admin@BIGDATA -r BIGDATA
kadmin:  add_principal -randkey host/master.bigdata
kadmin:  ktadd host/master.bigdata@BIGDATA
kadmin:  quit

ambari停止后 hdfs会停止吗 ambari启动_配置文件_07

3.3 在KDC Slave节点上编辑

[root@master ~]# echo host/manager.bigdata@BIGDATA > /var/kerberos/krb5kdc/kpropd.acl

3.4 在KDC Slave节点上初始化数据库

kdb5_util create -s -r BIGDATA

  • 此处数据库的名字BIGDATA应和KDC Master上的数据库名字保持一致,数据库密码也需要保持一致

3.5 在KDC Slave节点启动kpropd

systemctl start kprop.service :启动kprop服务

systemctl status kprop.service :查看kprop服务状态

systemctl enable kprop.service :设置kprop开启启动

systemctl is-enabled kprop.service :查看kprop开机启动是否设置成功

ambari停止后 hdfs会停止吗 ambari启动_ambari停止后 hdfs会停止吗_08

4.KDC主从同步设置

  • 登录KDC Master节点manager.bigdata
  • 执行命令 crontab -e,添加定时任务
*/2 * * * * /usr/sbin/kdb5_util dump /var/kerberos/krb5kdc/dump
*/2 * * * * /usr/sbin/kprop -r BIGDATA -f /var/kerberos/krb5kdc/dump master.bigdata

5.Ambari启动Kerberos认证

  • 登录Ambari WebUI页面。
  • Kerberos => ENABLE KERBEROS 启用Kerberos安全认证向导
  • ambari停止后 hdfs会停止吗 ambari启动_配置文件_09

  • 选择“Existing MIT KDC”,检查条件全部勾选
  • ambari停止后 hdfs会停止吗 ambari启动_Kerberos_10

  • 配置KDC,Kadmin,验证KDC数据库连接
  • ambari停止后 hdfs会停止吗 ambari启动_配置文件_11

  • 安装并测试Kerberos客户端
  • ambari停止后 hdfs会停止吗 ambari启动_ambari停止后 hdfs会停止吗_12

  • 配置相关信息
  • ambari停止后 hdfs会停止吗 ambari启动_数据库_13

  • 确认KDC配置情况
  • ambari停止后 hdfs会停止吗 ambari启动_配置文件_14

  • 停止集群服务
  • ambari停止后 hdfs会停止吗 ambari启动_配置文件_15

  • Kerberize集群
  • ambari停止后 hdfs会停止吗 ambari启动_Kerberos_16

  • 启动并测试服务,如果该过程存在一些组件启动失败,不用担心,可以结束该步骤之后手动单独启动该组件
  • ambari停止后 hdfs会停止吗 ambari启动_Kerberos_17

  • 结束
  • ambari停止后 hdfs会停止吗 ambari启动_Kerberos_18

  • 参考: