• Kafka 认证三:Kerberos 认证中心部署


    背景

    Kafka 支持 Kerberos的前提是部署 Kerberos 服务端,然后在 Kafka 所在的主机安装 Kerberos 客户端。

    Kerberos 是神话中具有三个头的保卫神犬,在没有部署 Kerberos 认证中心之前,曾看来两天这个协议的理论,但是很快就忘记了。

    本周为了测试 Kafka 的 Kerberos 认证,玩了一下 Kerberos 认证中心的部署,看着 kdc 的日志文件,操作几遍 kadmin.local 命令后,突然就理解了 Kerberos 认证流程了。

    Kerberos 服务端部署

    第一步,安装 KDC 所需的软件 krb5-server 和 krb5-workstation 。

    yum install krb5-libs krb5-server krb5-workstation
    
    • 1

    第二步,修改 Kerberos 配置文件 /etc/krb5.conf 。Kerberos 官方文档第一章就告诉我们需要先确定好我们的 Kerberos 服务需要配置的东西:

    在这里插入图片描述
    服务 Realm、服务 Realm 对应的主机名、KDC 和 kadmin 服务域名。

    添加一个我们测试的 Realm 名称为 MY_KDC.COM

    [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 = MY_KDC.COM
    # default_ccache_name = KEYRING:persistent:%{uid}
    
    [realms]
     MY_KDC.COM = {
      kdc = oracle
      admin_server = oracle
     }
    
    [domain_realm]
     .oracle = MY_KDC.COM
     oracle = MY_KDC.COM
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    关键配置:

    1. default_ccache_name 这一项注释掉,不明原因。
    2. default_realm 设置默认的 Realm,多 Realm 时不知道怎么配置。
    3. realms 配置,kdc 和 admin_server 后面的值是 /etc/hosts 中的目标主机 IP 的主机名称。
    4. domain_realm 是固定语法,即请求目标主机 oracle 的 Realm 值,这个配置令人费解,这里指定主机对应的 Realm,而前面又是 Realm 对应的主机。难道不会出现死循环吗?

    第三步,设置本机主机名 oracle 。 因为 Krb5.conf 中 Realm 中的 kdc 和 admin_server 的值是一个域名,这里设置为当前 Kerberos 服务器主机的域名。

    在这里插入图片描述

    第四步,修改 kdc 配置文件 /var/kerveros/krb5kdc/kdc.conf 文件 ,其中的 Realm 与上一步 krb5.conf 一致。

    第五步,为我们的 Realm 创建 Kerberos 数据库

    kdb5_util create -r MY_KDC.COM -s
    
    • 1

    第五步,创建管理员并设置密码。

    kadmin.local -q "addprinc admin/admin"
    
    • 1

    第六步,给数据库管理员添加ACL权限。 * 代表全部权限。

    vi /var/kerberos/krb5kdc/kadm5.acl
    添加我们的 Realm 的权限:* /admin@MY_KDC.COM	*
    
    • 1
    • 2

    到这里,Kerberos 服务端就部署完成了。

    添加开机服务

    Kerberos 服务端包含两个服务 krb5kdckadmin ,服务端必须启动这两个服务。

    systemctl enable kadmin
    systemctl enable krb5kdc
    systemctl start kadmin
    systemctl start krb5kdc
    
    • 1
    • 2
    • 3
    • 4

    启动成功后,可以用管理员帐号登录:
    在这里插入图片描述

    Kerberos 客户端安装

    客户端安装 yum install krb5-libs krb5-workstation,这是客户端的软件,然后 krb5.conf 文件从 Kerberos 服务端拷贝一份即可。

    我们在 Kafka 服务器上安装 Kerberos 客户端,就可以为 Kafka 添加 Kerberos 认证了。

    KDC 数据库操作命令

    (一)基础操作,数据库初始化命令:/usr/sbin/kdb5_util create -s

    (二)数据库创建后,使用本地登录 kadmin.local 后,可以执行下列操作:

    1. 注册帐号:addprinc username/hostname
    2. 修改帐号:modprinc -maxrenewlife 90day username/hostname@Realm,时间参数 90 day 可按需调整。
    3. 删除帐号:delprinc username/hostname@Realm
    4. 查看帐号列表:list_principals

    (三)命令行方式,生成 keytab 文件:kadmin.local -q "xst -norandkey -k /root/kafka-client.keytab username/host@Realm"

    感觉这几个命令就够用了,部署 Kafka Kerberos 认证时,就用了增、删、查、导出 keytab 文件这几个命令。

    遗留问题

    网上没找到多 Realm 实践的案例,就我自己测试的来看,在 Kerberos 客户端配置多个 realms 后,默认只会走 deault_realm 这一个 Realm ,认证流程错乱了。

    理论上 Kerberos 肯定是支持多 Realm 的,我们的需求是一个主机需要连接不同的 Kafka 集群,它们可能归属不同的 KDC 认证中心。

    参考文献

    1. 《由浅入深理解Kerberos协议》
    2. 《Kerberos 部署参考》 (虽然页面有劫持广告,但是流程还是很完整的。)
    3. 《Kerberos 部署准备工作》
    4. 《Kerberos 协议官方文档》
    5. 《Krb5.conf 官方配置说明》
  • 相关阅读:
    微软发布轻量级 VS Code 工具,可完全在浏览器中运行
    Typora mac新手入门教程
    神经网络之万能定理python-pytorch实现,可以拟合任意曲线
    估计、偏差和方差
    MySQL自连接和内连接和外连接_左外连接+右外连接
    内网渗透系列之真实内网环境搭建
    C#基础:类class与结构struct的区别
    解决aka.ms已拒绝连接 修改 hosts 文件并保存
    前房角镜的
    【Linux】基础:Linux环境基础开发工具——make与Makefile
  • 原文地址:https://blog.csdn.net/wojiushiwo945you/article/details/127803208