Centos7 + KDC 1.15 高可用部署(全量和增量方式)

目录

一、集群规划

二、主机环境准备

1、配置主机名

2、配置HOSTS

3、关闭防火墙

4、关闭SELINUX

5、修改时区

三、安装kerberos

1、安装软件包

2、配置/etc/krb5.conf

3、配置/var/kerberos/krb5kdc/kdc.conf

4、配置/var/kerberos/krb5kdc/kadm5.acl

5、初始化KDC数据库

6、添加数据库管理主体

7、启动服务

8、登录测试

9、创建KDC服务器host主体

10、查看keytab

四、配置主从高可用

1、主节点创建全量节点host主体

2、查看keytab

3、拷贝配置文件至备节点

4、备节点配置/var/kerberos/krb5kdc/kprop/kpropd.acl

5、在备节点启动kpropd服务

6、数据备份、同步

7、备节点启动服务

五、配置定时全量同步

1、主节点编写同步脚本/var/kerberos/krb5kdc/dump/krb5prop.sh

2、主节点配置crontab定时任务

3、测试kinit是否正常

六、配置增量同步(主节点直接同步备节点1、备节点2)

1、主、备节点配置/var/kerberos/krb5kdc/kdc.conf

2、主节点创建备节点kiprop主体

3、拷贝更新后的krb5.keytab到备节点

 4、主、备节点配置同步权限/var/kerberos/krb5kdc/kadm5.acl

5、重启主、备节点服务

6、查看同步信息

七、配置增量同步(主节点同步备节点1;备节点1同步备节点2)

1、主、备节点配置/var/kerberos/krb5kdc/kdc.conf(同上)

2、主节点创建备节点kiprop主体(同上)

3、拷贝更新后的krb5.keytab到备节点(同上)

4、主、备节点配置同步权限/var/kerberos/krb5kdc/kadm5.acl(同上)

5、备节点1修改kadmin启动配置/etc/sysconfig/kadmin

6、备节点2修改kprop启动配置/etc/sysconfig/kprop

7、重启主、备节点服务(同上)

八、Kerberos认证原理

1、名词解释

2、认证过程

九、参考资料


一、集群规划

        本次测试采用2台虚拟机,操作系统版本为centos7.6
        kerberos采用默认YUM源安装,版本为:1.15.1-55
        提示:Kerberos最新版本可从官网下载,下载地址为:https://web.mit.edu/kerberos/

IP地址 主机名 KDC
192.168.121.101 node101.cc.local KDC master
192.168.121.102 node102.cc.local KDC slaver 1级
192.168.121.103 node103.cc.local KDC slaver 2级

二、主机环境准备

1、配置主机名

### 在node1节点均执行操作 ###

hostnamectl set-hostname node101.cc.local

### 在node2节点均执行操作 ###

hostnamectl set-hostname node102.cc.local   

2、配置HOSTS

### 在每个节点均执行操作 ###

cat << EOF > /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.121.101 node101.cc.local node101
192.168.121.102 node102.cc.local node102
EOF

3、关闭防火墙

### 在每个节点均执行操作 ###
systemctl stop firewalld.service
systemctl disable firewalld.service

4、关闭SELINUX

### 在每个节点均执行操作 ###
sed -i.bak$DATE '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
setenforce 0

5、修改时区

### 在每个节点均执行操作 ###

#timedatectl set-timezone "Asia/Shanghai"

三、安装kerberos

1、安装软件包

krb5-server:Kerberos服务端程序,KDC所在节点。
krb5-workstation: 包含一些基本Kerberos程序,比如(kinit, klist, kdestroy,kpasswd),使用Kerberos的所有节点都应该部署。
krb5-libs:包含Kerberos程序的各种支持类库等。

yum -y install krb5-libs krb5-server krb5-workstation

2、配置/etc/krb5.conf

# Configuration snippets may be placed in this directory as well
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 = FILE:/etc/pki/tls/certs/ca-bundle.crt
 default_realm = CC.LOCAL
 #default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 CC.LOCAL = {
  kdc = node101.cc.local:88
  kdc = node102.cc.local:88
  kdc = node103.cc.local:88
  admin_server = node101.cc.local:749
 }

[domain_realm]
 .cc.local= CC.LOCAL
 cc.local= CC.LOCAL

说明:
[logging]:日志输出设置
[libdefaults]:默认配置,未指定Kerberos域时生效
dns_lookup_realm:DNS查找域名,默认禁用
ticket_lifetime:凭证生效的时限,设置为24h。
renew_lifetime:凭证最长可以被延期的时限,一般为7天
forwardable:转发票据,默认开启,KDC可以基于该类型TGT发放新的TGT,无需用户再身份验证
rdns:反向解析,默认禁用即可
pkinit_anchors:配置pkinit的位置,默认即可
default_realm:设置默认领域
default_ccache_name:默认的缓存名称,不推荐使用该参数
[realms]:列举使用的 realm
admin_server:admin服务地址,格式 [主机名或域名]:端口, 默认端口749,默认端口可不写
kdc:kdc服务器地址,格式?[主机名或域名]:端口, 默认端口是88,默认端口可不写
[domain_realm]:指定DNS域名和Kerberos域名之间映射关系
[kdc]:kdc的配置信息。即指定kdc.conf的位置
profile:kdc的配置文件路径,默认没有配置,如果是默认路径,可以不写

3、配置/var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 CC.LOCAL = {
  #master_key_type = aes256-cts
  max_renewable_life = 7d
  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
 }

说明:
kdc_ports:指定KDC的默认端口,默认88,如果多个以逗号分隔
kdc_tcp_ports:指定KDC的TCP协议默认端口,默认88,如果多个以逗号分隔
[realms]:该部分列出每个领域的配置。
master_key_type:和 supported_enctypes 默认使用 aes256-cts。JAVA 使用 aes256-cts 验证方式需要安装 JCE包(推荐不使用),默认为注释的
max_renewable_life:可重获取票据最大时间,默认为0
acl_file:admin 的用户权限的文件,默认即可,若文件不存在,需要用户自己创建。
dict_file:该参数指向包含潜在可猜测或可破解密码的文件,默认即可
admin_keytab:KDC 进行校验的 keytab,默认即可
supported_enctypes:指定此KDC支持的各种加密类型,默认即可。

4、配置/var/kerberos/krb5kdc/kadm5.acl

kws/[email protected]

说明:
CC.LOCAL领域中的kws/admin主体可修改KDC中的主体或策略。缺省安装包括一个*,以匹配所有的admin主体,但此缺省安装可能会造成安全风险,故设置一个所有admin主体的列表会更安全。

5、初始化KDC数据库

kdb5_util create -r CC.LOCAL -s

Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'CC.LOCAL',
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: cckdc!101
Re-enter KDC database master key to verify: cckdc!101

说明:
[-s] 表示生成stash file,并在其中存储master server key(krb5kdc)
[-r] 来指定一个realm name,当krb5.conf中定义了多个realm时才是必要的。
如果需要重建数据库,将/var/kerberos/krb5kdc目录下的principal相关的文件删除即可

6、添加数据库管理主体

kadmin.local -q "addprinc kws/admin"

Authenticating as principal root/[email protected] with password.
WARNING: no policy specified for kws/[email protected]; defaulting to no policy
Enter password for principal "kws/[email protected]": kws!101
Re-enter password for principal "kws/[email protected]": kws!101
Principal "kws/[email protected]" created.

7、启动服务

systemctl start krb5kdc
systemctl start kadmin
systemctl enable krb5kdc
systemctl enable kadmin

8、登录测试

kadmin -p kws/[email protected]

Authenticating as principal kws/[email protected] with password.
Password for kws/[email protected]: kws!101
kadmin:  list_principals
K/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kiprop/[email protected]
krbtgt/[email protected]
kws/[email protected]

9、创建KDC服务器host主体

kadmin.local

 创建node101服务器host的principal

Authenticating as principal root/[email protected] with password.
kadmin.local:  addprinc -randkey host/node101.cc.local
WARNING: no policy specified for host/[email protected]; defaulting to no policy
Principal "host/[email protected]" created.

生成keytab文件

kadmin.local:  ktadd host/node101.cc.local
Entry for principal host/node101.cc.local with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type camellia256-cts-cmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type camellia128-cts-cmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type des-hmac-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type des-cbc-md5 added to keytab FILE:/etc/krb5.keytab.

按照以上步骤,创建node102、node103的principal,并生成keytab文件

kadmin.local:  addprinc -randkey host/node102.cc.local
kadmin.local:  ktadd host/node102.cc.local

10、查看keytab

#klist -ekt /etc/krb5.keytab

Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 08/01/2023 11:59:57 host/[email protected] (aes256-cts-hmac-sha1-96) 
   2 08/01/2023 11:59:57 host/[email protected] (aes128-cts-hmac-sha1-96) 
   2 08/01/2023 11:59:57 host/[email protected] (des3-cbc-sha1) 
   2 08/01/2023 11:59:57 host/[email protected] (arcfour-hmac) 
   2 08/01/2023 11:59:57 host/[email protected] (camellia256-cts-cmac) 
   2 08/01/2023 11:59:57 host/[email protected] (camellia128-cts-cmac) 
   2 08/01/2023 11:59:57 host/[email protected] (des-hmac-sha1) 
   2 08/01/2023 11:59:57 host/[email protected] (des-cbc-md5) 
   2 08/01/2023 12:03:44 host/[email protected] (aes256-cts-hmac-sha1-96) 
   2 08/01/2023 12:03:44 host/[email protected] (aes128-cts-hmac-sha1-96) 
   2 08/01/2023 12:03:44 host/[email protected] (des3-cbc-sha1) 
   2 08/01/2023 12:03:44 host/[email protected] (arcfour-hmac) 
   2 08/01/2023 12:03:44 host/[email protected] (camellia256-cts-cmac) 
   2 08/01/2023 12:03:44 host/[email protected] (camellia128-cts-cmac) 
   2 08/01/2023 12:03:44 host/[email protected] (des-hmac-sha1) 
   2 08/01/2023 12:03:44 host/[email protected] (des-cbc-md5) 

四、配置主从高可用

1、主节点创建全量节点host主体

kadmin.local

 创建node101服务器host的principal

Authenticating as principal root/[email protected] with password.
kadmin.local:  addprinc -randkey host/node101.cc.local
WARNING: no policy specified for host/[email protected]; defaulting to no policy
Principal "host/[email protected]" created.

生成keytab文件

kadmin.local:  ktadd host/node101.cc.local
Entry for principal host/node101.cc.local with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type camellia256-cts-cmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type camellia128-cts-cmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type des-hmac-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/node101.cc.local with kvno 2, encryption type des-cbc-md5 added to keytab FILE:/etc/krb5.keytab.

按照以上步骤,创建node102、node103的principal,并生成keytab文件

kadmin.local:  addprinc -randkey host/node102.cc.local
kadmin.local:  ktadd host/node102.cc.local
kadmin.local:  addprinc -randkey host/node103.cc.local
kadmin.local:  ktadd host/node103.cc.local

2、查看keytab

#klist -ekt /etc/krb5.keytab

Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 08/01/2023 11:59:57 host/[email protected] (aes256-cts-hmac-sha1-96) 
   2 08/01/2023 11:59:57 host/[email protected] (aes128-cts-hmac-sha1-96) 
   2 08/01/2023 11:59:57 host/[email protected] (des3-cbc-sha1) 
   2 08/01/2023 11:59:57 host/[email protected] (arcfour-hmac) 
   2 08/01/2023 11:59:57 host/[email protected] (camellia256-cts-cmac) 
   2 08/01/2023 11:59:57 host/[email protected] (camellia128-cts-cmac) 
   2 08/01/2023 11:59:57 host/[email protected] (des-hmac-sha1) 
   2 08/01/2023 11:59:57 host/[email protected] (des-cbc-md5) 
   2 08/01/2023 12:03:44 host/[email protected] (aes256-cts-hmac-sha1-96) 
   2 08/01/2023 12:03:44 host/[email protected] (aes128-cts-hmac-sha1-96) 
   2 08/01/2023 12:03:44 host/[email protected] (des3-cbc-sha1) 
   2 08/01/2023 12:03:44 host/[email protected] (arcfour-hmac) 
   2 08/01/2023 12:03:44 host/[email protected] (camellia256-cts-cmac) 
   2 08/01/2023 12:03:44 host/[email protected] (camellia128-cts-cmac) 
   2 08/01/2023 12:03:44 host/[email protected] (des-hmac-sha1) 
   2 08/01/2023 12:03:44 host/[email protected] (des-cbc-md5) 
   ……

3、拷贝配置文件至备节点

scp /etc/krb5.conf node102:/etc/
scp /etc/krb5.keytab node102:/etc/
scp /var/kerberos/krb5kdc/kdc.conf node102:/var/kerberos/krb5kdc/
scp /var/kerberos/krb5kdc/kadm5.acl node102:/var/kerberos/krb5kdc/
scp /var/kerberos/krb5kdc/.k5.CC.LOCAL node102:/var/kerberos/krb5kdc/
scp /etc/krb5.conf node103:/etc/
scp /etc/krb5.keytab node103:/etc/
scp /var/kerberos/krb5kdc/kdc.conf node103:/var/kerberos/krb5kdc/
scp /var/kerberos/krb5kdc/kadm5.acl node103:/var/kerberos/krb5kdc/
scp /var/kerberos/krb5kdc/.k5.CC.LOCAL node103:/var/kerberos/krb5kdc/

说明:
如果备节点使用的不是主节点拷贝过来的.k5.CC.LOCAL会报错:
krb5kdc: Unable to decrypt latest master key with the provided master key
 - while fetching master keys list for realm CC.LOCAL 

4、备节点配置/var/kerberos/krb5kdc/kprop/kpropd.acl

host/[email protected]
host/[email protected]
host/[email protected]

说明:
创建kpropd.acl文件默认放在/var/kerberos/krb5kdc目录下,将导致kadmin认为此节点是备用节点而不能启动,所以如果有备用节点启动kadmin服务的需求,建议kprop配置放在别目录,此次处放置在/var/kerberos/krb5kdc/kprop目录。

-- Unit kadmin.service has begun starting up.
Aug 01 15:57:30 node102.cc.local _kadmind[11403]: Error. This appears to be a slave
Aug 01 15:57:30 node102.cc.local systemd[1]: kadmin.service: control process exited

5、在备节点启动kpropd服务

由于修改了kpropd.acl文件的默认目录,需修改kprop服务启动环境变量文件/etc/sysconfig/kprop

KPROPD_ARGS= -a /var/kerberos/krb5kdc/kprop/kpropd.acl

systemctl daemon-reload
systemctl start kprop
systemctl status kprop

6、数据备份、同步

在主节点上导出备份文件

kdb5_util dump /var/kerberos/krb5kdc/kdc.dump

在备份数据同步到备节点上

kprop -f /var/kerberos/krb5kdc/kdc.dump -d node102
kprop -f /var/kerberos/krb5kdc/kdc.dump -d node103

8938 bytes sent.
Database propagation to node102: SUCCEEDED

 说明:
kpropd服务默认监听端口为754,kprop命令默认可不加-P参数,其用于指定端口

7、备节点启动服务

systemctl start krb5kdc
systemctl start kadmin
systemctl enable krb5kdc

说明:备节点开启管理服务后,如果客户端连接备节点操作,备用节点操作的管理数据因为无法反向同步回主节点,可能造成丢失,所以备用节点启用管理服务要慎重,至少要能做到记录操作的内容,主节点恢复后将操作内容重新执行。不推荐备用节点启用管理服务

五、配置定时全量同步

1、主节点编写同步脚本/var/kerberos/krb5kdc/dump/krb5prop.sh

#!/bin/bash
DATE=`date +"%Y%m%d%H%M%S"`
DUMP=/var/kerberos/krb5kdc/dump/master.dump_$DATE
PORT=754
SLAVE=$1
TIMESTAMP=`date`
echo "Start at $TIMESTAMP"

if [ ! -f $DUMP ];then
  kdb5_util dump $DUMP
fi

kprop -f $DUMP -d -P $PORT $SLAVE

if [ $? -eq 0 ]; then
  result='1'
else
  result=$?
fi

echo "sync_kdc{time=\"$DATE\",slave_host=\"$SLAVE\"} $result" >> /var/kerberos/krb5kdc/dump/sync.pro

chmod +x /var/kerberos/krb5kdc/dump/krb5prop.sh

2、主节点配置crontab定时任务

15 * * * * /var/kerberos/krb5kdc/dump/krb5prop.sh node2
15 * * * * /var/kerberos/krb5kdc/dump/krb5prop.sh node3

3、测试kinit是否正常

kinit kws/[email protected]

Password for kws/[email protected]

# klist

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: kws/[email protected]
Valid starting       Expires              Service principal
08/01/2023 17:02:16  08/02/2023 17:02:16  krbtgt/[email protected]
        renew until 08/08/2023 17:02:16

六、配置增量同步(主节点直接同步备节点1、备节点2)

增量同步 1.7 及以后的版本支持,由于都是通过kprop同步服务实现,使用增量同步就不能使用全量同步。此外增量同步有一些注意事项:

  • 增量同步不支持同步策略,如果主节点有策略更新,则会处罚所有备节点的全量同步;
  • 增量同步时,主节点和备节点必须可以通过网络TCP直接连接,不能经过NAT
  • 增量同步时,备节点的KDB必须支持锁,不可以使用 LDAP模式

1、主、备节点配置/var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 CC.LOCAL = {
  #master_key_type = aes256-cts
  max_renewable_life = 7d
  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
  iprop_enable = true
  iprop_ulogsize = 2000
  iprop_replica_poll = 2m
  iprop_port = 760
  iprop_resync_timeout = 5m
 }

说明:
iprop_enable:指定是否启用增量数据库同步。 默认值为false,不开启
iprop_ulogsize:指定增量传播要保留的最大日志条目数。 默认值为 1000。在版本 1.11 之前,最大值为 2500。版本 1.19 中的新增功能
iprop_master_ulogsize:1.19 版本之前的 iprop_ulogsize 的名称。 如果未指定 iprop_ulogsize,则其值将用作后备值。
iprop_replica_poll:指定副本 KDC 轮询主节点新更新的频率。 默认值为“2m”(即两分钟)。 1.17 版本中的新增功能。
iprop_slave_poll:1.17版本之前的iprop_replica_poll的名称。 如果未指定 iprop_replica_poll,则其值将用作后备。
iprop_listen:指定 kadmind 守护进程的 iprop RPC监听地址和/或端口,如IP、PORT、[IP:PORT]。如果地址包含冒号,请将其括在方括号中。 如果未指定地址,则使用通配符地址。 如果 kadmind 无法绑定到任何指定地址,它将无法启动。 默认值是绑定到 iprop_port 中指定的端口处的通配符地址。 1.15 版本中的新增功能。
iprop_port:指定用于增量同步的端口号,没有默认端口号。备节点 KDC 配置文件中需要此配置,主配置文件中需要此配置或“iprop_listen”。 在“iprop_listen”条目中指定的端口号将覆盖“kadmind”守护程序的此端口号。
iprop_resync_timeout:指定等待同步完成的超时时间、,该配置可选,仅由副本 KDC 使用。 默认值为 5 分钟 (5m)。 1.11 版本中的新增功能
iprop_logfile:指定更新日志文件的存储位置。 默认情况下是使用 krb5 配置文件的realms部分中的“database_name”条目,并附加“.ulog”。如果在realms中未指定database_name,可能是正在使用LDAP数据库后端(默认为{LOCALSTATEDIR}/krb5kdc/principal),或者在[dbmodules]部分中指定了文件名,则默认当作database_name使用。iprop_logfile 默认值将不使用 [dbmodules] 部分中的值。

2、主节点创建备节点kiprop主体

kadmin.local:  addprinc -randkey kiprop/[email protected]
kadmin.local:  addprinc -randkey kiprop/[email protected]
kadmin.local:  ktadd kiprop/node101.cc.local
kadmin.local:  ktadd kiprop/node102.cc.local
kadmin.local:  ktadd kiprop/node103.cc.local

说明:
如果开启增量同步,主节点数据库中必须要包含备节点的kiprop主体,同时也要生成keytab文件分发给备节点,不然启动kprop服务时会报错: /usr/sbin/kpropd: Key table entry not found while initializing /usr/sbin/kpropd interface, retrying。

3、拷贝更新后的krb5.keytab到备节点

scp /etc/krb5.keytab node102:/etc/
scp /etc/krb5.keytab node103:/etc/

 4、主、备节点配置同步权限/var/kerberos/krb5kdc/kadm5.acl

kiprop/[email protected]     p
kiprop/[email protected]     p

说明:
在主节点上需要给备节点的kiprop主体增加允许同步数据库的权限,对应修改kadm5.acl

5、重启主、备节点服务

主节点

systemctl restart kadmin
systemctl restart krb5kdc

 备节点

systemctl restart kprop
systemctl restart krb5kdc

说明:
第一次同步会先做一次全量同步
Aug  2 19:54:21 node102 systemd: Starting Kerberos 5 Propagation...
Aug  2 19:54:21 node102 systemd: Started Kerberos 5 Propagation.
Aug  2 19:54:21 node102 kpropd[18121]: kpropd: Full resync needed.
Aug  2 19:54:21 node102 kpropd[18121]: Full resync request granted.
Aug  2 19:54:21 node102 kpropd[18123]: Connection from node101.cc.local

6、查看同步信息

kproplog -h

Kerberos update log (/var/kerberos/krb5kdc/principal.ulog)
Update log dump :
        Log version # : 1
        Log state : Stable
        Entry block size : 2048
        Number of entries : 1
        First serial # : 4
        Last serial # : 4
        First time stamp : Wed Aug  2 18:40:46 2023
        Last time stamp : Wed Aug  2 18:40:46 2023

七、配置增量同步(主节点同步备节点1;备节点1同步备节点2)

1、2、3、4步骤同上

5、备节点1修改kadmin启动配置/etc/sysconfig/kadmin

KADMIND_ARGS=" -proponly "

说明:
备节点采用增量同步模式启动kadmin,仅用于增量同步

6、备节点2修改kprop启动配置/etc/sysconfig/kprop

KPROPD_ARGS="-A node102.cc.local"

说明:
备节点2上的kprop同步服务指定访问备份节点1上的kadmin来进行增量同步

八、Kerberos认证原理

1、名词解释

KDC(Key Distribution Center):秘钥分发中心,简称KDC,默认安装在域控里,包括AS和TGS。AS(Authentication Service):身份验证服务,简称AS,用于KDC对Client认证。
TGS(Ticket Grantng Service):票据授予服务,简称TGS,用于KDC向Client和Server分发Session Key(临时秘钥)。
TGT(Ticket Granting Ticket):认证票据,用于验证Client的身份
ST(Server Ticket):服务票据
AD(Active Directory):活动目录,简称AD,用于存储用户、用户组、域相关的信息。
Client:用户客户端
Server:提供服务的服务端
krbtgt用户:创建域控时自动生成的用户

2、认证过程

  • Client—> AS:使用Client的NTLM-Hash加密的时间戳

        Client输入用户和密码,并且向KDC的AS发送一个AS_REQ,这个AS_REQ里包含了使用Client的NTLM-Hash(用户明文密码加密而成)加密的时间戳,以及Client-info、Server-info等数据,以及一些其他信息。

  • AS 处理:

        AS接收到Client发送的AS_REQ,通过Client使用的用户名查询AD 数据库是否存在,如果有就用此用户的NTLM-Hash来对AS_REQ进行解密,如果可以成功解密,且解密后得到的时间戳和时差在5分钟内则为认证成功。
        AS会生成一个AS_REP,AS_REP包含两个部分:①AS生成的随机数session-key,使用Client的NTLM-Hash加密得到session-key-as,用于Client和KDC进行安全通信;②使用特定用户krbtgt的 NTLM Hash加密 session key、时间戳以及一些用户信息,生成TGT。

  • AS —> Client:session-key-as 和 TGT

        当Client收到了AS发回来的AS_REQ时,会使用Client的NTLM-Hash,将被加密过的临时秘钥Session-Key进行解密,得到没有被加密的Session-Key,然后将其保存在本地。

  • Client—>TGS : TGT 和 session-key加密的时间戳

        如果Client有需要访问某个Server时就可以构成TGS_REQ提交给TGS。TGS_REQ中包含了使用Session-Key加密的时间戳,以及Client-info、Server-info 等数据,以及使用krbtgt用户NTLM-Hash加密的TGT

  • TGS 处理

        当TGS收到TGS_REQ后,首先使用krbtgt用户的NTLM-Hash对TGT解密,得到Session-Key、时间戳以及Client-info、Server-info等数据,TGS会校验时间戳和解密时间的时差是否超时,会检验TGT里的Client信息和当前Client的信息是否一致,判断无误后则会再检查此Client是否有访问此Server的权限,如果有,则返回一个TGS_REP,包含两部分:①TGS生成新的Session-key-tgs,再使用从TGT里解密得到的Session-key加密TGS生成的新的Session-key-tgs,得到Session-key-tgs-encrypt;②使用Client要访问的Server的NTLM-Hash加密TGS生成的Session-key-tgs,得到ST。

  • TGS —> Client: Session-key-tgs-encrypt和ST

        Client收到了TGS_REP,获得Session-key-tgs以及ST。使用储存在本地的Session-key对Session-key-tgs-encrypt进行解密,得到未加密的Session-key-tgs,将其和ST一起储存在本地。

  • Client—> Server

        当Client需要访问Server时,Client则会发送AP_REQ给Server。AP_REQ包含了使用Session-key-tgs加密的时间戳、Client-info、Server-info等数据,以及ST。

  • Server 处理

        Server收到AP_REQ后会使用自己的NTLM-Hash对ST进行解密,得到Session-key-tgs,在使用Session-key-tgs解密得到时间戳。Server根据时间戳的时差判断是否超时,然后再验证该Client的访问权限,验证成功后返回校验结果。

  • Server —> Client

        返回校验结果。

九、参考资料

 MIT Kerberos Documentation (1.21.1) — MIT Kerberos Documentation

你可能感兴趣的:(大数据,hadoop,大数据)