文章目录
- 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:
- 当我们创建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数据库文件
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 ~]#
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 ~]#
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/
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
- 在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
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开机启动是否设置成功
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安全认证向导
- 选择“Existing MIT KDC”,检查条件全部勾选
- 配置KDC,Kadmin,验证KDC数据库连接
- 安装并测试Kerberos客户端
- 配置相关信息
- 确认KDC配置情况
- 停止集群服务
- Kerberize集群
- 启动并测试服务,如果该过程存在一些组件启动失败,不用担心,可以结束该步骤之后手动单独启动该组件
- 结束
- 参考:
- Kerberos官网:http://web.mit.edu/kerberos/
- https://docs.oracle.com/cd/E26926_01/html/E25889/intro-1.html#scrolltoc
- http://web.mit.edu/kerberos/krb5-1.17/doc/index.html
- https://kerberos.org/dist/index.html