原文:Canonical / Ubuntu Server 文档贡献者,How to install a Kerberos server。本文依据 2026 年 10 月 5 日读取的全文翻译整理;原页标注更新于 2026 年 10 月 2 日。页面未署个人作者。命令保留原文技术含义,编辑核验与修正均单独说明,本文没有执行部署或认证测试。
本文建立一个 MIT Kerberos 领域,创建普通用户及管理主体,配置管理权限和 DNS 服务发现,最后说明怎样核对票据是否成功签发。示例领域为 EXAMPLE.COM,主 KDC 为 kdc01.example.com,备用 KDC 为 kdc02.example.com;普通主体是 ubuntu,管理主体是 ubuntu/admin。这些都是需要按实际网络替换的示例值。

先准备 DNS 与时间同步
安装前应有正确配置的 DNS。Kerberos 的领域名按惯例与 DNS 域相对应,通常使用大写形式,因此示例域 example.com 对应领域 EXAMPLE.COM。这是一种约定,不意味着随意设置一个领域名就会自动建立 DNS。
Kerberos 对时钟敏感。按原文所述默认配置,客户端与服务器的时间相差超过五分钟时,工作站不能完成认证。所有相关主机应同步到一致、可靠的时间源;可参考 Ubuntu 的时间同步说明。首先排查名称解析和时间偏差,能避免将基础设施问题误判成密码错误。
安装软件包并初始化领域
在预定的主 KDC 上安装 KDC 与管理服务:
sudo apt install krb5-kdc krb5-admin-server
安装过程会询问领域的 Kerberos 服务器和管理服务器名称。它们可以是同一台主机,也可以不同。本例将在当前主机上建立两项服务,因此填写当前服务器的完整主机名 kdc01.example.com。原文提示,默认领域名称取自 KDC 所属域;仍应核对安装界面生成的值。
接着创建新的领域数据库:
sudo krb5_newrealm
程序会请求数据库主密码,用于加密本地数据库。原文明确提醒:程序不会替你检查这一密码的强度。应使用强密码并安全保存,不要把它写进脚本、命令行参数或文章示例。
编辑说明:原文正文把工具名称写成了 kdb5_newrealm,但其实际命令为 krb5_newrealm;本文采用命令块中的名称。初始化会建立身份数据库,应只在计划中的新领域上操作,不应把它当成已有 KDC 的一般修复命令。
核对配置并创建主体
安装问答主要写入两个文件:/etc/krb5.conf 由 Kerberos 5 库读取;/etc/krb5kdc/kdc.conf 配置 KDC。调整 KDC 配置后,需要重启 krb5-kdc 守护进程。原文还给出重新配置入口:
sudo dpkg-reconfigure krb5-kdc
它用于重新配置软件包,不应被理解为完整的领域重命名或数据库迁移方案。若涉及已有领域,先核对备份、主体、服务 keytab 和依赖客户端。krb5.conf 的手册页由 krb5-doc 软件包提供。
首次创建主体时还没有可用于远程管理的管理员身份,因此在主 KDC 上运行:
sudo kadmin.local
然后在交互提示符中输入以下命令,按提示输入并确认新主体密码:
addprinc ubuntu
quit
原文示例会显示未指定密码策略的警告。这不是完成密码策略配置的证明;实际部署应另外制定策略。不要将示例中的提示行或“创建成功”输出一并粘贴为命令。
技术修正:原文称 kadmin.local 通过本地 UNIX socket 与 KDC 通信。MIT 官方手册的说明是:kadmin.local 直接访问 KDC 数据库,通常必须在主 KDC 上以足够权限运行;远程 kadmin 才通过 kadmind 执行管理操作。本文按 MIT 手册修正此处解释。
若要远程管理,再创建一个独立的管理实例。按惯例在用户名后加 /admin,有助于明确区分日常身份与管理身份:
sudo kadmin.local
addprinc ubuntu/admin
quit
明确管理 ACL 的授权范围
新建一个名字带 /admin 的主体,并不会自动授予它管理权限。权限配置位于 /etc/krb5kdc/kadm5.acl。原文先给出精确主体的示例:
ubuntu/admin@EXAMPLE.COM *
原文还列出通配写法:
*/admin@EXAMPLE.COM *
第二种写法把所有 /admin 实例都纳入该管理权限规则,授权范围明显更广。这两行是解释 ACL 的原文示例,不是最低权限配置。第一种虽然缩小了主体范围,右侧的 * 仍代表广泛管理权限。应按实际职责和目标主体限制权限,具体权限字符与限制语法见 kadm5.acl 手册;不要只因主体后缀是 /admin 就无条件信任它。
保存规则后,重启管理服务使配置生效:
sudo systemctl restart krb5-admin-server.service
这一步会影响管理服务的可用性。应把变更范围、维护时间和回退方式纳入实际部署计划。
取得并查看 TGT
原文使用管理员主体演示获取初始票据:
kinit ubuntu/admin
klist
kinit 按提示读取密码;klist 查看当前凭据缓存。应核对默认主体是否为 ubuntu/admin@EXAMPLE.COM,服务主体是否为 krbtgt/EXAMPLE.COM@EXAMPLE.COM,并检查有效起止时间和可续期时间。这些字段分别说明当前身份、票据授予服务及票据生命周期。
原文输出来自 2020 年,缓存路径为 FILE:/tmp/krb5cc_1000,其中 1000 是当时用户的 UID。本文不把旧日期和路径当成当前环境的预期结果;不同缓存后端与系统设置可能呈现不同的路径。成功获取 TGT 也只证明这一步成功,不等于所有应用服务的 Kerberos 集成都已完成。
通过 DNS 发现 KDC
kinit 会读取 /etc/krb5.conf,确定要联系的 KDC 及其地址。Kerberos 还可以利用特定 DNS 记录进行发现。原文为 example.com 区域列出了以下 SRV 记录:
_kerberos._udp.EXAMPLE.COM. IN SRV 1 0 88 kdc01.example.com.
_kerberos._tcp.EXAMPLE.COM. IN SRV 1 0 88 kdc01.example.com.
_kerberos._udp.EXAMPLE.COM. IN SRV 10 0 88 kdc02.example.com.
_kerberos._tcp.EXAMPLE.COM. IN SRV 10 0 88 kdc02.example.com.
_kerberos-adm._tcp.EXAMPLE.COM. IN SRV 1 0 749 kdc01.example.com.
_kpasswd._udp.EXAMPLE.COM. IN SRV 1 0 464 kdc01.example.com.
记录包含两个 KDC 的 Kerberos 服务入口、主 KDC 上的管理入口和密码变更入口。配置备用 KDC 的 DNS 记录不等于配置了备用 KDC 本身。本篇没有部署数据库复制;只有另行完成备用 KDC 配置后,才应发布其服务记录。名称末尾的点表示完整限定域名,修改示例时不要无意改变其含义。
使用跟踪信息定位认证问题
将 KRB5_TRACE 指向文件或标准错误,可以看到 kinit 选择领域、解析 KDC 和发送请求的过程:
KRB5_TRACE=/dev/stderr kinit ubuntu/admin
原文跟踪示例依次显示取得初始凭据、发送未经认证的初始请求、向领域发送请求,以及解析 kdc01.example.com。这里的“未经认证请求”是跟踪中的协议阶段描述,不应直接理解为已经绕过认证。跟踪信息很详细,也会暴露主体名和内部主机名;排障后应按敏感日志处理。
至此,原文描述的新领域具备为客户端签发票据的基础。服务主体、keytab、应用接入及备用 KDC 的配置应继续按相应官方章节完成。本文只做来源与命令的静态核验,没有在真实 KDC 上运行上述流程,也不对未知部署环境作安全保证。
来源与授权:保留 Canonical / Ubuntu Server 文档贡献者归属及原页 Copyright © 2026 标识。原页正文未单独标注许可证版本,本文不推定为某个 CC 版本。技术修正依据 MIT Kerberos 官方手册;示意图为未完纪原创。
原文交互与票据输出
下列是原文历史输出;密码输入位置为空,没有包含实际密码。旧日期、UID和主机名不代表当前环境。
sudo kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin.local: addprinc ubuntu WARNING: no policy specified for ubuntu@EXAMPLE.COM; defaulting to no policy Enter password for principal "ubuntu@EXAMPLE.COM": Re-enter password for principal "ubuntu@EXAMPLE.COM": Principal "ubuntu@EXAMPLE.COM" created. kadmin.local: quit
sudo kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin.local: addprinc ubuntu/admin WARNING: no policy specified for ubuntu/admin@EXAMPLE.COM; defaulting to no policy Enter password for principal "ubuntu/admin@EXAMPLE.COM": Re-enter password for principal "ubuntu/admin@EXAMPLE.COM": Principal "ubuntu/admin@EXAMPLE.COM" created. kadmin.local: quit
klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: ubuntu/admin@EXAMPLE.COM
Valid starting Expires Service principal
04/03/20 19:16:57 04/04/20 05:16:57 krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 04/04/20 19:16:55
KRB5_TRACE=/dev/stderr kinit ubuntu/admin [2898] 1585941845.278578: Getting initial credentials for ubuntu/admin@EXAMPLE.COM [2898] 1585941845.278580: Sending unauthenticated request [2898] 1585941845.278581: Sending request (189 bytes) to EXAMPLE.COM [2898] 1585941845.278582: Resolving hostname kdc01.example.com (...)












暂无评论内容