1、主备节点安装kerberos服务

主节点: cdh01
备节点: cdh02
配置时间服务器

  1. #修改配置文件
  2. vi /etc/chrony.conf
  3. server ntp.aliyun.com iburst #如果连接公网,填写此时间服务器
  4. #启动时间服务器
  5. systemctl start chronyd && systemctl enable chronyd

验证
image.png

#检查yum环境 如果没有问题就可以进行安装
yum clean && yum makecache

#安装kerberos服务
sudo yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation

image.png

2、配置主kerberos

配置krb5.conf

/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。以下为基本配置
下面配置EXAMPLE.COM请替换自己的域名

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

[libdefaults]
 default_realm = CDH.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
  CDH.COM = {
   kdc = cdh01
   kdc = cdh02
   admin_server = cdh01
  }

[domain_realm]
  .cdh.com = CDH.COM
  cdh.com = CDH.COM

说明

  • [logging]:表示server端的日志的打印位置
  • [libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
    • default_realm = EXAMPLE.COM 默认的realm,必须跟要配置的realm的名称一致。
    • udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误
    • ticket_lifetime表明凭证生效的时限,一般为24小时。
    • renew_lifetime表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,
    • 对安全认证的服务的后续访问则会失败。
    • [realms]:列举使用的realm。
    • kdc:代表要kdc的位置。格式是 机器:端口
    • admin_server:代表admin的位置。格式是机器:端口
    • default_domain:代表默认的域名
  • [appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置。

    配置kdc.conf

    默认放在 /var/kerberos/krb5kdc/kdc.conf ```shell [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88

[realms] CDH.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 max_life = 25h max_renewable_life = 8d }

说明

- EXAMPLE.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
- max_renewable_life = 8d 涉及到是否能进行ticket的renwe必须配置。
- master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,推荐不使用。
- acl_file:标注了admin的用户权限。文件格式是
- Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。
- admin_keytab:KDC进行校验的keytab。后文会提及如何创建。
- supported_enctypes:支持的校验方式。注意把aes256-cts去掉。
<a name="AccXV"></a>
#### <br />配置kadm5.acl
修改服务端cdh01上的配置文件/var/kerberos/krb5kdc/kadm5.acl,以允许具备匹配条件的admin用户进行远程登录权限:
```shell
*/admin@CDH.COM *

说明:

  • 标注了admin的用户权限,需要用户自己创建。文件格式是
  • Kerberos_principal permissions [target_principal] [restrictions]
  • 支持通配符等。最简单的写法是
  • /admin@EXAMPLE.COM
  • 代表名称匹配/admin@EXAMPLE.COM 都认为是admin,权限是 代表全部权限。

    创建kerberos数据库

    在cdh01上进行初始化,默认的数据库路径为/var/kerberos/krb5kdc,如果需要重建数据库,将该目录下的principal相关的文件删除即可,请牢记数据库密码。

    kdb5_util create -r CDH.COM -s
    

    说明:

  • [-s] 表示生成 stash file ,并在其中存储master server key(krb5kdc)

  • [-r] 来指定一个realm name , 当krb5.conf中定义了多个realm时使用
  • 当 Kerberos database创建好之后,在 /var/kerberos/ 中可以看到生成的 principal相关文件

    启动kerberos服务

    在cdh01上执行 ```shell

    启动服务命令

    systemctl start krb5kdc systemctl start kadmin

加入开机启动项

systemctl enable krb5kdc systemctl enable kadmin

<a name="xVcTB"></a>
#### 验证服务
```java
systemctl status kadmin.service
systemctl status krb5kdc

image.png

添加admin用户

$ kadmin.local
addprinc admin/admin@CDH.COM

验证admin用户

kinit admin/admin@CDH.COM

image.png

生成主备principal

删除/etc/krb5.keytab

kadmin.local -q "ank -randkey host/cdh01@CDH.COM"
kadmin.local -q "ank -randkey host/cdh02@CDH.COM"

kadmin.local -q "ktadd host/cdh01@CDH.COM"
kadmin.local -q "ktadd host/cdh02@CDH.COM"

格式为:
host/[主KDC主机名]@[域名]
host/[备KDC主机名]@[域名]

3、配置备kerberos

创建kpropd.acl文件

vi /var/kerberos/krb5kdc/kpropd.acl
host/cdh01@CDH.COM
host/cdh02@CDH.COM

同步kdc配置文件
scp /etc/krb5.conf /etc/krb5.keytab cdh02:/etc/
scp /var/kerberos/krb5kdc/kdc.conf /var/kerberos/krb5kdc/kadm5.acl /var/kerberos/krb5kdc/.k5.CDH.COM cdh02:/var/kerberos/krb5kdc/

启动kpropd服务及验证状态

systemctl start  kprop.service
systemctl enable  kprop.service
systemctl status  kprop.service

image.png

同步数据库(只在master节点执行)

kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
kprop -f /var/kerberos/krb5kdc/slave_datatrans cdh02
如果出现问题,可在命令前加 KRB5_TRACE=/dev/stdout 。开启debug模式
如下图

image.png
执行成功会提示SUCCEEDED。
kdc的数据库没有自动同步的命令,需要手动同步。设置一个 crontab 作业,定时同步数据库。在 /var/kerberos/ 下新建 dump 目录,用来存放备份的数据库。在 /var/kerberos/ 下新建 dump_sh目录,用来存放执行备份的脚本和日志。

mkdir  /var/kerberos/dump_sh /var/kerberos/dump
vi /var/kerberos/dump_sh/sync_db.sh
#!/bin/sh

slaves="cdh02"
echo `date`"Start sync!"
sudo kdb5_util dump /var/kerberos/dump/DB_backup
for slave in $slaves;
do
    sudo kprop -f /var/kerberos/dump/DB_backup $slave
done
echo `date`"Completing sync!"

设置定时任务

crontab -e
##kerberos back sync scripts
*/2 * * * * bash /var/kerberos/dump_sh/sync_db.sh > /var/kerberos/dump_sh/sync.log

启动备用节点服务

systemctl enable krb5kdc
systemctl start krb5kdc

验证切换

  • 从kerberos客户端服务器,使用kinit获取ticket,正常情况下会从master上获取。
  • 关闭master上的kdc服务。
  • 再次kerberos客户端服务器,使用kinit 获取ticket,如果成功,说明生效。

关闭主节点(cdh01)kinit 认证
image.png
开启主节点后
image.png

遇到的问题

kprop: Decrypt integrity check failed while getting initial credentials
image.png
是由于KVNO的版本不一致导致的。需要删除掉/etc/krb5.keytab重新生成

#删除krb5.keytab
rm -f /etc/krb5.keytab
#生成主备principal
kadmin.local -q "ank -randkey host/cdh01@CDH.COM"
kadmin.local -q "ank -randkey host/cdh02@CDH.COM"

kadmin.local -q "ktadd host/cdh01@CDH.COM"
kadmin.local -q "ktadd host/cdh02@CDH.COM"

#复制到备节点
scp /etc/krb5.keytab /etc/krb5.keytab

image.png