TT Bigdata TT Bigdata
首页
GitHub (opens new window)
JaneTTR

JaneTTR

数据酿造智慧,每一滴都是沉淀!
  • 产品中心

  • 安装与使用

    • Ambari Plus 安装

    • 组件安装

    • 开启高可用

    • 权限与安全专题

      • 权限与安全总览
      • Kerberos

        • Kerberos 专题
        • 【托管】MIT KDC 单节点接入与验证
        • 【托管】MIT KDC 高可用部署与验证
        • 【外置】MIT KDC 接入与验证
        • 【共用】Principal、Keytab 与账号审计
        • 【共用】LDAP 用户与 Kerberos 身份同步
        • 【共用】外部应用 Kerberos 接入与组件验证
        • 【运维】KDC 备份、密钥轮换与故障恢复
        • Kerberos 停用与回退
        • 附录:托管 MIT KDC 环境准备
        • 附录:原生安装 MIT KDC 实验环境
          • 原生安装 MIT KDC 实验环境
          • 先看清平台边界
          • 准备主机与软件包
          • 建立独立目录
          • 写入 Realm 配置
          • 初始化 KDC 数据库
          • 使用独立 systemd 服务
          • 从集群节点验证取票
          • 接入 Ambari Plus
          • 验收时我会检查什么
          • 留一份可恢复的备份
      • LDAP

    • Ambari Plus Monitor

    • 常见问题

  • 发布与支持

  • 会员与访问

目录
原生安装 MIT KDC 实验环境
先看清平台边界
准备主机与软件包
建立独立目录
写入 Realm 配置
初始化 KDC 数据库
使用独立 systemd 服务
从集群节点验证取票
接入 Ambari Plus
验收时我会检查什么
留一份可恢复的备份

附录:原生安装 MIT KDC 实验环境

# 原生安装 MIT KDC 实验环境

如果手边没有现成的企业 KDC,可以先在集群外准备一台独立主机,搭建一套 MIT KDC,再按“外部 MIT KDC”模式接入 Ambari Plus。这样可以同时验证外部认证中心的网络、管理权限和平台接入边界。

本文沿用一次真实验收环境的参数:KDC 主机为 dev1.test.com,Realm 为 EXTDEV.TEST,KDC 数据放在 /data/extdev/kdc。示例没有包含公网 IP、密码或密钥,实际部署时请替换成自己的 FQDN 和 Realm。

注意

这是一套单节点外部 KDC,适合功能验证、测试和接入联调。生产环境还需要单独规划 KDC 副本、数据库备份、故障切换和运维权限,不能把本附录直接当成生产高可用方案。

# 先看清平台边界

外部 MIT KDC 接入与运维边界

外部模式下,Ambari Plus 负责给集群节点写客户端配置、创建服务 Principal、分发 Keytab 并切换集群认证模式。KDC 进程、Realm 数据、备份和恢复仍由外部管理员负责。

本次实测还确认了一条重要边界:平台解除外部 KDC 接入后,外部 KDC 的进程、启动时间和 Principal 集合都没有变化。也就是说,“停用 Kerberos”只解除当前集群关系,不等于卸载外部认证中心。

# 准备主机与软件包

我会先确认 KDC 主机满足下面这些条件:

  • 使用稳定的 FQDN,例如 dev1.test.com,所有 Hadoop 节点都能解析这个名称。
  • 与集群节点使用同一时间源,避免因为时钟偏差导致票据失效。
  • 88/TCP、88/UDP 和 749/TCP 没有被其他 KDC 占用。
  • 防火墙允许所有集群节点访问这些端口。
  • KDC 主机不属于 Ambari Plus 当前托管的 KDC 拓扑。

不同系统的软件包名称不完全一样。dev1 实测环境是 Kylin V10 aarch64,使用 krb5-server、krb5-client 和 krb5-libs。

    sudo dnf install -y krb5-server krb5-client
    
    1
    sudo dnf install -y krb5-server krb5-workstation
    
    1
    sudo apt update
    sudo DEBIAN_FRONTEND=noninteractive apt install -y \
      krb5-kdc krb5-admin-server krb5-user krb5-config
    
    1
    2
    3
    // Make sure to add code blocks to your code group

    安装完成后确认命令已经可用:

    command -v krb5kdc kadmind kdb5_util kadmin kinit
    
    1

    确认主机与 MIT Kerberos 软件包

    这里不仅要看到服务端命令,也要确认客户端工具已经安装。后面验证票据时会直接用到 kinit 和 klist。

    # 建立独立目录

    为了不覆盖主机上可能存在的 /etc/krb5.conf、默认 KDC 数据库或其他测试 Realm,我建议把配置、数据库、日志和密钥全部放进独立目录。

    sudo install -d -m 700 \
      /data/extdev/kdc/db \
      /data/extdev/kdc/etc \
      /data/extdev/kdc/log \
      /data/extdev/kdc/run \
      /data/extdev/kdc/secrets \
      /data/extdev/kdc/systemd
    
    1
    2
    3
    4
    5
    6
    7

    这里的 EXTDEV.TEST、dev1.test.com 和 /data/extdev/kdc 是一组完整参数。修改时要同步替换后面所有配置和命令,不能只改 Realm 名称。

    # 写入 Realm 配置

    先创建 /data/extdev/kdc/etc/kdc.conf:

    [kdcdefaults]
     kdc_ports = 88
     kdc_tcp_ports = 88
    
    [realms]
     EXTDEV.TEST = {
      database_name = /data/extdev/kdc/db/principal
      admin_keytab = /data/extdev/kdc/secrets/kadm5.keytab
      acl_file = /data/extdev/kdc/etc/kadm5.acl
      key_stash_file = /data/extdev/kdc/secrets/.k5.EXTDEV.TEST
      kadmind_port = 749
      kpasswd_port = 464
      max_life = 24h
      max_renewable_life = 7d
      default_principal_flags = +preauth
     }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    再创建 /data/extdev/kdc/etc/krb5.conf:

    [libdefaults]
     default_realm = EXTDEV.TEST
     dns_lookup_realm = false
     dns_lookup_kdc = false
     rdns = false
     dns_canonicalize_hostname = false
     ticket_lifetime = 24h
     forwardable = true
     udp_preference_limit = 1
    
    [realms]
     EXTDEV.TEST = {
      kdc = dev1.test.com
      admin_server = dev1.test.com
      kpasswd_server = dev1.test.com
     }
    
    [domain_realm]
     .test.com = EXTDEV.TEST
     test.com = EXTDEV.TEST
    
    [logging]
     kdc = FILE:/data/extdev/kdc/log/krb5kdc.log
     admin_server = FILE:/data/extdev/kdc/log/kadmind.log
     default = FILE:/data/extdev/kdc/log/krb5lib.log
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    最后创建 /data/extdev/kdc/etc/kadm5.acl,先允许指定管理 Principal 维护这个 Realm:

    admin/[email protected] *
    
    1

    收紧配置文件权限:

    sudo chown -R root:root /data/extdev/kdc
    sudo chmod 700 /data/extdev/kdc/{db,etc,log,run,secrets,systemd}
    sudo chmod 600 /data/extdev/kdc/etc/{kdc.conf,krb5.conf,kadm5.acl}
    
    1
    2
    3

    核对独立实例目录与关键配置

    截图中可以同时核对目录权限、Realm、主机名和端口。stash、密码与 Keytab 不应该出现在操作记录里。

    笔记

    示例中的 admin/admin 便于理解接入流程。生产环境建议使用专门的 KDC 管理 Principal,按企业规范限制权限,并在接入完成后轮换临时凭据。

    # 初始化 KDC 数据库

    下面两条环境变量很关键。它们让 MIT Kerberos 使用独立目录中的配置,不会误读系统默认配置。

    export KRB5_CONFIG=/data/extdev/kdc/etc/krb5.conf
    export KRB5_KDC_PROFILE=/data/extdev/kdc/etc/kdc.conf
    umask 077
    
    1
    2
    3

    初始化 Realm 数据库:

    sudo --preserve-env=KRB5_CONFIG,KRB5_KDC_PROFILE \
      kdb5_util create -s -r EXTDEV.TEST
    
    1
    2

    命令会交互式要求输入 KDC 数据库主密钥。不要把主密钥写在命令行、脚本、截图或文章里。

    随后创建用于远程管理的 Principal:

    sudo --preserve-env=KRB5_CONFIG,KRB5_KDC_PROFILE \
      kadmin.local -r EXTDEV.TEST \
      -q "addprinc admin/[email protected]"
    
    1
    2
    3

    这里输入的是 KDC 管理 Principal 密码,它与数据库主密钥、Ambari Plus 登录密码和 LDAP 管理密码都不是一回事。

    # 使用独立 systemd 服务

    创建 /data/extdev/kdc/systemd/extdev-krb5kdc.service:

    [Unit]
    Description=EXTDEV.TEST isolated external KDC
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    Environment=KRB5_CONFIG=/data/extdev/kdc/etc/krb5.conf
    Environment=KRB5_KDC_PROFILE=/data/extdev/kdc/etc/kdc.conf
    ExecStart=/usr/sbin/krb5kdc -n -r EXTDEV.TEST -p 88 -P /data/extdev/kdc/run/krb5kdc.pid
    Restart=on-failure
    RestartSec=3
    UMask=0077
    NoNewPrivileges=yes
    PrivateTmp=yes
    ProtectHome=yes
    ProtectSystem=strict
    ReadWritePaths=/data/extdev/kdc
    
    [Install]
    WantedBy=multi-user.target
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    创建 /data/extdev/kdc/systemd/extdev-kadmind.service:

    [Unit]
    Description=EXTDEV.TEST external KDC administration daemon
    After=network-online.target extdev-krb5kdc.service
    Requires=extdev-krb5kdc.service
    
    [Service]
    Type=simple
    Environment=KRB5_CONFIG=/data/extdev/kdc/etc/krb5.conf
    Environment=KRB5_KDC_PROFILE=/data/extdev/kdc/etc/kdc.conf
    ExecStart=/usr/sbin/kadmind -nofork -r EXTDEV.TEST -port 749 -P /data/extdev/kdc/run/kadmind.pid
    Restart=on-failure
    RestartSec=3
    UMask=0077
    NoNewPrivileges=yes
    PrivateTmp=yes
    ProtectHome=yes
    ProtectSystem=strict
    ReadWritePaths=/data/extdev/kdc
    
    [Install]
    WantedBy=multi-user.target
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    安装并启动两个服务:

    sudo install -m 0644 \
      /data/extdev/kdc/systemd/extdev-krb5kdc.service \
      /etc/systemd/system/extdev-krb5kdc.service
    
    sudo install -m 0644 \
      /data/extdev/kdc/systemd/extdev-kadmind.service \
      /etc/systemd/system/extdev-kadmind.service
    
    sudo systemctl daemon-reload
    sudo systemctl enable --now extdev-krb5kdc.service extdev-kadmind.service
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    查看进程和监听端口:

    sudo systemctl --no-pager --full status \
      extdev-krb5kdc.service extdev-kadmind.service
    
    sudo ss -lntup | grep -E ':(88|464|749)\b'
    
    1
    2
    3
    4

    KDC 与管理服务启动状态

    正常情况下至少可以看到 KDC 的 88/TCP、88/UDP 和管理服务的 749/TCP。如果准备使用 Kerberos 改密协议,还要放通并检查 464/TCP、464/UDP。

    使用 firewalld 放通端口
    sudo firewall-cmd --permanent --add-port=88/tcp
    sudo firewall-cmd --permanent --add-port=88/udp
    sudo firewall-cmd --permanent --add-port=749/tcp
    sudo firewall-cmd --permanent --add-port=464/tcp
    sudo firewall-cmd --permanent --add-port=464/udp
    sudo firewall-cmd --reload
    
    1
    2
    3
    4
    5
    6

    如果现场使用云安全组、硬件防火墙或其他主机防火墙,还要在对应位置设置同样的访问范围。不要为了省事直接向公网开放这些端口。

    # 从集群节点验证取票

    不要一启动服务就直接进入 Ambari Plus 向导。先在 hadoop1.test.com、hadoop2.test.com 和 hadoop3.test.com 分别验证 DNS、端口与取票。

    在每台节点准备一份临时客户端配置 /tmp/extdev-krb5.conf:

    [libdefaults]
     default_realm = EXTDEV.TEST
     dns_lookup_realm = false
     dns_lookup_kdc = false
     rdns = false
     dns_canonicalize_hostname = false
    
    [realms]
     EXTDEV.TEST = {
      kdc = dev1.test.com:88
      admin_server = dev1.test.com:749
     }
    
    [domain_realm]
     .test.com = EXTDEV.TEST
     test.com = EXTDEV.TEST
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    逐台执行:

    getent hosts dev1.test.com
    timeout 5 bash -c '</dev/tcp/dev1.test.com/88'
    timeout 5 bash -c '</dev/tcp/dev1.test.com/749'
    
    export KRB5_CONFIG=/tmp/extdev-krb5.conf
    kdestroy -A 2>/dev/null || true
    kinit admin/[email protected]
    klist
    kvno krbtgt/[email protected]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    三台 Hadoop 节点访问外部 KDC

    端口连通要从三台 Agent 节点分别确认。只在 dev1.test.com 本机看到监听,并不能证明集群节点真的能访问外部 KDC。

    klist 中应看到默认 Principal 为 admin/[email protected],票据签发方为 krbtgt/[email protected]。

    验证 Principal 与 TGT 签发

    为了避免管理密码进入截图,这里使用临时 Principal 和临时 Keytab 验证 TGT 签发。验证完成后应立即删除临时 Principal、Keytab 和票据缓存。

    然后在一台节点上验证远程管理写入。进入交互式 kadmin 后创建、查询并删除临时 Principal:

    export KRB5_CONFIG=/tmp/extdev-krb5.conf
    kadmin -p admin/[email protected]
    
    1
    2
    kadmin: addprinc -randkey [email protected]
    kadmin: getprinc [email protected]
    kadmin: delprinc -force [email protected]
    kadmin: quit
    
    1
    2
    3
    4

    只有 kinit 和远程 kadmin 都通过,才能说明外部 KDC 同时具备取票能力和平台创建服务 Principal 所需的管理能力。

    # 接入 Ambari Plus

    KDC 验证完成后,回到 Ambari Plus 的外部接入向导,填写:

    页面字段 本次示例
    认证服务主机 dev1.test.com
    Realm EXTDEV.TEST
    域名映射 .test.com,test.com
    管理服务主机 dev1.test.com
    KDC 端口 88
    KDC 管理账号 admin/[email protected]
    KDC 管理密码 创建管理 Principal 时设置的密码。

    接下来的页面操作、预检、执行计划和结果验证见 外部 MIT KDC 接入。

    # 验收时我会检查什么

    检查项 预期结果
    三节点取票 hadoop1、hadoop2、hadoop3 都能获得 EXTDEV.TEST 票据。
    管理写入 可以创建、查询并删除临时 Principal。
    平台所有权 页面显示外部 MIT KDC,而不是平台托管 KDC。
    服务身份 外部 Realm 中出现平台创建的服务 Principal。
    Keytab 目标主机收到对应 Keytab,服务能够使用它启动。
    服务恢复 接入完成后,原先运行的服务恢复并通过最终 Service Check。
    解除接入 平台只切回非 Kerberos 模式,不停止 KDC、不删除 Realm 数据。

    如果其中任何一项失败,不要只看页面上的“已启用”。外部 KDC 接入真正闭环,需要同时证明网络、取票、管理写入、Keytab、服务恢复和外部所有权边界都成立。

    # 留一份可恢复的备份

    即使是测试 KDC,也建议在接入前保存一次数据库转储,并把配置、ACL、stash 和转储文件放到受控的安全目录。

    sudo install -d -m 700 /data/extdev/kdc-backup
    
    sudo env \
      KRB5_CONFIG=/data/extdev/kdc/etc/krb5.conf \
      KRB5_KDC_PROFILE=/data/extdev/kdc/etc/kdc.conf \
      kdb5_util dump /data/extdev/kdc-backup/extdev-$(date +%Y%m%d).dump
    
    sudo chmod 600 /data/extdev/kdc-backup/*
    
    1
    2
    3
    4
    5
    6
    7
    8

    不要把 stash、数据库转储、管理密码或 Keytab 上传到文档站、代码仓库和普通工单附件。需要截图时,也要先把这些内容、IP、账号和密钥信息打码。

    #Kerberos#MIT KDC#外部认证中心#Kylin V10
    附录:托管 MIT KDC 环境准备
    LDAP 专题

    ← 附录:托管 MIT KDC 环境准备 LDAP 专题→

    最近更新
    01
    当前版本 2026/08
    08-29
    02
    把 Ambari Server HA 稳稳地跑起来
    08-17
    03
    从一次启用操作追到主备就绪
    08-17
    更多文章>
    Theme by Vdoing | Copyright © 2017-2026 JaneTTR | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式