【Ambari开启Kerberos】Step1-KDC服务初始化安装-适合Ubuntu

温馨提示

本文内容在 Ubuntu 22.04 系统 下完成测试,相关系列系统在配置路径与命令格式上基本一致。

如在部署中遇到问题,可联系作者共同探讨或反馈。

👉 联系入口在此页

一、前置准备与安装 krb5 服务组件

Kerberos 的核心是 KDC(Key Distribution Center) ,相当于整个安全体系的"签发机构"。

任何服务、主机或用户要访问受保护的资源,都必须先通过它来获取凭证(Ticket)。

为什么要先部署 KDC?

Ambari 集群启用安全认证时,底层所有 Hadoop 组件(如 HDFS、YARN、Hive)都会与 KDC 通信。

如果 KDC 配置错误,后续 Ambari 的 Enable Kerberos Wizard 无法完成配置推送,整个集群会陷入半认证状态。

1. 安装核心包

bash 复制代码
sudo apt update
sudo apt install -y krb5-kdc krb5-admin-server krb5-user

这三个包的作用如下:

软件包 作用说明
krb5-kdc 提供 KDC 服务核心功能
krb5-admin-server 提供管理端 kadmind 服务
krb5-user 客户端命令行工具,如 kinitklistkdestroy

::: note 小贴士:Rhel 系列的包名区别

在 Rhel相关系统中,对应的安装命令为:

bash 复制代码
yum install -y krb5-server krb5-libs krb5-workstation

路径相同,但配置文件位于 /var/kerberos/krb5kdc

。可以参考Step1-KDC服务初始化安装-RHEL

二、修改 krb5.conf ------ 定义安全域与服务端信息

KDC 的核心配置位于 /etc/krb5.conf,它定义了客户端、服务端、日志等信息。

我们需要对默认模板进行自定义修改。

bash 复制代码
vim /etc/krb5.conf

1. 重点修改项

bash 复制代码
[libdefaults]
default_realm = TTBIGDATA.COM

[realms]
 TTBIGDATA.COM = {
  kdc = dev1
  admin_server = dev1
 }

2. 修改说明

  • default_realm

    定义默认认证域(Realm),必须使用大写字母。

    建议使用公司或团队的域名缩写,例如:TTBIGDATA.COM

  • kdc

    指定 KDC 服务器主机名。若使用 IP 地址,则必须与 /etc/hosts 一致。

  • admin_server

    指定 Kerberos 管理服务(kadmind)所在主机,一般与 kdc 同机。

注意

不要保留示例配置 EXAMPLE.COM,否则后续 Ambari 推送配置时会报错:
Cannot connect to KDC for realm EXAMPLE.COM

3. 完整配置示例

bash 复制代码
[libdefaults]
  #renew_lifetime = 7d
  forwardable = true
  default_realm = TTBIGDATA.COM
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = /tmp/krb5cc_%{uid}
  #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
  #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  TTBIGDATA.COM = {
    admin_server = dev1
    kdc = dev1
  }

建议

  1. 若集群中有多台 KDC,可在 realms 中添加多条 kdc = hostX
  2. 若 DNS 配置完善,可使用 FQDN(我的主机名就叫 dev1 所以我填这个,可以自己 hostname 查看)以避免主机名解析问题。

三、创建 KDC 数据库(核心初始化)

执行以下命令以创建 KDC 主数据库:

bash 复制代码
kdb5_util create -s

系统将提示你输入并确认密码,该密码为 KDC 主密钥(Master Key)

与后续登录管理员账户无关,但请务必妥善保存,丢失后数据库将无法恢复。

常见问题

  1. 命令未找到 :请确认 krb5-server 安装成功;
  2. 权限不足:需以 root 身份运行;
  3. 数据库路径不存在 :默认路径 /etc/krb5kdc/

创建完成后,会生成以下文件:

bash 复制代码
drwx------   2 root root  4096 11月  4 06:39 ./
drwxr-xr-x 132 root root 12288 11月  4 07:28 ../
-rw-------   1 root root    78 11月  4 01:12 .k5.TTBIGDATA.COM
-rw-r--r--   1 root root    26 11月  4 01:16 kadm5.acl
-rw-------   1 root root   154 11月  4 02:52 kadm5.keytab
-rw-r--r--   1 root root   508 11月  4 01:19 kdc.conf
-rw-------   1 root root    78 11月  4 01:26 stash
root@dev1:/etc/krb5kdc# pwd
/etc/krb5kdc
root@dev1:/etc/krb5kdc#

四、启动并设置服务自启

bash 复制代码
sudo systemctl start krb5-kdc
sudo systemctl start krb5-admin-server
sudo systemctl enable krb5-kdc
sudo systemctl enable krb5-admin-server

执行完成后,可通过以下命令检查状态:

bash 复制代码
sudo systemctl status krb5-kdc
sudo systemctl status krb5-admin-server

若使用 Rhel

服务名称略有不同:

bash 复制代码
systemctl start krb5kdc kadmin

五、创建管理员账号与访问控制

执行以下命令创建 KDC 管理员账户:

bash 复制代码
kadmin.local -q "addprinc admin/admin"

输入密码后,系统会生成 Principal:

复制代码
Principal "admin/admin@TTBIGDATA.COM" created.

此账户用于登录 kadmin 命令行工具,以管理后续服务账户和 keytab 文件。

温馨提示

我这里为了演示,我输入的密码是 admin,要与后续Ambari页面凭证保持统一

  • 凭证: admin/admin@TTBIGDATA.COM
  • 密码: admin
    和 RHEL差异

这里建议加一个 kadmin/dev1@TTBIGDATA.COM 不然会报错。这在Ubuntu上发生了,目前暂不清楚是哪个环节问题。

具体踩坑记录可参考 >> Failed to kinit as the KDC administrator user

bash 复制代码
sudo kadmin.local -q "listprincs" | grep kadmin
sudo kadmin.local -q "addprinc -randkey kadmin/dev1@TTBIGDATA.COM"
sudo kadmin.local -q "ktadd -k /etc/krb5kdc/kadm5.keytab kadmin/dev1@TTBIGDATA.COM"

# 添加完再次查看
sudo kadmin.local -q "listprincs" | grep kadmin

/usr/bin/kinit -c FILE:/var/lib/ambari-server/data/tmp/ambari_krb_1690981287658684697cc -S kadmin/dev1 admin/admin@TTBIGDATA.COM

验证完毕后如下图所示

六、编辑 ACL 权限规则

KDC 使用 ACL 文件控制谁能执行管理操作。

默认文件路径:

bash 复制代码
vim /etc/krb5kdc/kadm5.acl

修改内容为:

bash 复制代码
*/admin@TTBIGDATA.COM   *

ACL 权限语法说明

格式为:

复制代码
principal permissions [target_principal] [restrictions]

例如:

复制代码
admin/admin@TTBIGDATA.COM  *

表示拥有所有权限。

若想只允许添加用户,可使用:

复制代码
*/admin@TTBIGDATA.COM   a

七、确认 kdc.conf 与 ACL 路径一致

查看 kdc.conf

bash 复制代码
cat /etc/krb5kdc/kdc.conf
bash 复制代码
[kdcdefaults]
    kdc_ports = 750,88
[realms]
  TTBIGDATA.COM = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        kdc_ports = 750,88
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        #master_key_type = aes256-cts
        #supported_enctypes = aes256-cts:normal aes128-cts:normal
        default_principal_flags = +preauth
    }

确认路径与 ACL 文件匹配,否则 kadmind 启动会报:

复制代码
Cannot open ACL file /etc/krb5kdc/kadm5.acl

八、重启并验证服务运行

重启 KDC 与管理服务:

bash 复制代码
sudo systemctl restart krb5-kdc
sudo systemctl restart krb5-admin-server

验证:

bash 复制代码
kinit admin/admin@TTBIGDATA.COM
# 输入完密码后
klist

若能看到下面内容,说明配置成功。

相关推荐
Leinwin2 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382502 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇2 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7592 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣3 小时前
智能体选型实战指南
运维·人工智能
yy55273 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ4 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔5 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密5 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20155 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑