FreeBSD 中文手册
FreeBSD 中文社区
  • FreeBSD 中文手册
  • 编辑日志
  • 译者说明
  • FreeBSD 中文手册
  • 概述
  • 前言
    • 致读者
    • 第四版
    • 第三版
    • 第二版(2004)
    • 第一版(2001)
    • 本书的组织结构
    • 本书中使用的一些约定
    • 致谢
  • 第一部分:快速开始
  • 第1章 简介
    • 1.1.概述
    • 1.2.欢迎来到 FreeBSD!
    • 1.3.关于 FreeBSD 项目
  • 第2章 安装 FreeBSD
    • 2.1.概述
    • 2.2.最低硬件要求
    • 2.3.安装前的准备工作
    • 2.4.开始安装
    • 2.5.使用 bsdinstall
    • 2.6.分配磁盘空间
    • 2.7.获取安装文件
    • 2.8.账户、时区、服务和安全
    • 2.9.故障排除
    • 2.10.使用 Live CD
  • 第3章 FreeBSD 基础
    • 3.1.概述
    • 3.2.虚拟控制台和终端
    • 3.3.用户和基本账户管理
    • 3.4.权限
    • 3.5.目录结构
    • 3.6.磁盘结构
    • 3.7.文件系统的挂载与卸载
    • 3.8.进程和守护进程
    • 3.9.Shell
    • 3.10.文本编辑器
    • 3.11.设备和设备节点
    • 3.12.手册页
  • 第4章 安装应用程序:软件包和 Ports
    • 4.1.概述
    • 4.2.软件安装的概述
    • 4.3.寻找所需的应用程序
    • 4.4.使用 pkg 管理二进制包
    • 4.5.使用 Ports
    • 4.6.使用 Poudriere 构建软件包
    • 4.7.安装后的注意事项
    • 4.8.如何处理损坏的 port
  • 第5章 X Window 系统
    • 5.1.概述
    • 5.2.安装 Xorg
    • 5.3.显卡驱动
    • 5.4.Xorg 配置
    • 5.5.在 X11 中使用字体
  • 第6章 FreeBSD 中的 Wayland
    • 6.1.简介
    • 6.2.Wayland 概述
    • 6.3.Wayfire 混成器
    • 6.4.Hikari 混成器
    • 6.5.Sway 混成器
    • 6.6.使用 Xwayland
    • 6.7.使用 VNC 进行远程连接
    • 6.8.Wayland 登录管理器
    • 6.9.实用工具
  • 第7章 网络
    • 7.1.概述
    • 7.2.设置网络
    • 7.3.有线网络
    • 7.4.无线网络
    • 7.5.主机名
    • 7.6.DNS
    • 7.7.故障排除
  • 第二部分:常见任务
  • 第8章 桌面环境
    • 8.1.概述
    • 8.2.桌面环境
    • 8.3.浏览器
    • 8.4.开发工具
    • 8.5.桌面办公应用
    • 8.6.文档阅读器
    • 8.7.财务
  • 第9章 多媒体
    • 9.1.概述
    • 9.2.设置声卡
    • 9.3.音频播放器
    • 9.4.视频播放器
    • 9.5.视频会议
    • 9.6.图像扫描仪
  • 第10章 配置 FreeBSD 内核
    • 10.1.概述
    • 10.2.为什么要构建定制内核
    • 10.3.浏览系统硬件
    • 10.4.配置文件
    • 10.5.构建并安装定制内核
    • 10.6.如果发生了错误
  • 第11章 打印
    • 11.1.快速入门
    • 11.2.连接打印机
    • 11.3.常见的页面描述语言(PDL)
    • 11.4.直接打印
    • 11.5.LPD(行式打印机程序)
    • 11.6.其他打印系统
  • 第12章 Linux 二进制兼容层
    • 12.1.概述
    • 12.2.配置 Linux 二进制兼容层
    • 12.3.Linux 用户空间
    • 12.4.高级主题
  • 第13章 WINE
    • 13.1.概述
    • 13.2.WINE 概述和概念
    • 13.3.在 FreeBSD 上安装 WINE
    • 13.4.在 FreeBSD 上运行第一个 WINE 程序
    • 13.5.配置 WINE 安装程序
    • 13.6.WINE 图形化用户管理界面
    • 13.7.多用户 FreeBSD 与 WINE
    • 13.8.FreeBSD 上的 WINE 常见问题
  • 第三部分:系统管理
  • 第14章 配置与优化
    • 14.1.概述
    • 14.2.配置文件
    • 14.3.管理 FreeBSD 中的服务
    • 14.4.Cron 和 Periodic
    • 14.5.配置系统日志
    • 14.6.电源和资源管理
    • 14.7.添加交换空间
  • 第15章 FreeBSD 的引导过程
    • 15.1.概述
    • 15.2.FreeBSD 的引导过程
    • 15.3.Device Hints
    • 15.4.关机流程
  • 第16章 安全
    • 16.1.概述
    • 16.2.简介
    • 16.3.账户安全
    • 16.4.入侵检测系统(IDS)
    • 16.5.安全等级
    • 16.6.文件标志位
    • 16.7.OpenSSH
    • 16.8.OpenSSL
    • 16.9.Kerberos
    • 16.10.TCP 封装器(TCP Wrapper)
    • 16.11.访问控制列表(ACL)
    • 16.12.Capsicum
    • 16.13.进程记账
    • 16.14.资源限制
    • 16.15.监控第三方安全问题
    • 16.16.FreeBSD 安全公告
  • 第17章 jail 与容器
    • 17.1.概述
    • 17.2.jail 的类型
    • 17.3.主机配置
    • 17.4.传统 jail(厚 jail)
    • 17.5.瘦 jail
    • 17.6.管理 jail
    • 17.7.更新 jail
    • 17.8.jail 资源限制
    • 17.9.jail 管理器与容器
  • 第18章 强制访问控制
    • 18.1.概述
    • 18.2.关键术语
    • 18.3.了解 MAC 标签
    • 18.4.规划安全配置
    • 18.5.可用的 MAC 策略
    • 18.6.用户锁定
    • 18.7.MAC Jail 中的 Nagios
    • 18.8.MAC 框架的故障排除
  • 第19章 安全事件审计
    • 19.1.概述
    • 19.2.关键术语
    • 19.3.审计配置
    • 19.4.使用审计跟踪
  • 第20章 存储
    • 20.1.概述
    • 20.2.添加磁盘
    • 20.3.调整和增加磁盘大小
    • 20.4.USB 存储设备
    • 20.5.创建和使用 CD
    • 20.6.创建和使用 DVD
    • 20.7.创建和使用软盘
    • 20.8.备份的基础知识
    • 20.9.内存盘
    • 20.10.文件系统快照
    • 20.11.磁盘配额
    • 20.12.加密磁盘分区
    • 20.13.加密交换分区
    • 20.14.高可用性存储(HAST)
  • 第21章 GEOM: 模块化磁盘转换框架
    • 21.1.概述
    • 21.2.RAID0——条带
    • 21.3.RAID1——镜像
    • 21.4.RAID3——带有专用奇偶校验的字节级条带
    • 21.5.软件 RAID 设备
    • 21.6.GEOM Gate 网络设备
    • 21.7.为磁盘设备添加卷标
    • 21.8.通过 GEOM 实现 UFS 日志
  • 第22章 Z 文件系统(ZFS)
    • 22.1.是什么使 ZFS 与众不同
    • 22.2.快速入门指南
    • 22.3.zpool 管理
    • 22.4.zfs 管理
    • 22.5.委托管理
    • 22.6.高级主题
    • 22.7.更多资源
    • 22.8.ZFS 特性和术语
  • 第23章 其他文件系统
    • 23.1.概述
    • 23.2.Linux® 文件系统
    • 23.3.Windows® 文件系统
    • 23.4.MacOS® 文件系统
  • 第24章 虚拟化
    • 24.1.概述
    • 24.2.使用 macOS® 上的 Parallels Desktop 安装 FreeBSD
    • 24.3.使用 macOS® 上的 VMware Fusion 安装 FreeBSD
    • 24.4.使用 VirtualBox™ 安装 FreeBSD
    • 24.5.在 FreeBSD 上安装 VirtualBox™
    • 24.6.使用 FreeBSD 上的 QEMU 虚拟化
    • 24.7.使用 FreeBSD 上的 bhyve 虚拟机
    • 24.8.基于 FreeBSD 的 Xen™ 虚拟机
  • 第25章 本地化——i18n/L10n 的使用和设置
    • 25.1.概述
    • 25.2.使用本地化
    • 25.3.寻找 i18n 应用程序
    • 25.4.特定语言的区域配置
  • 第26章 FreeBSD 更新与升级
    • 26.1.概述
    • 26.2.更新 FreeBSD
    • 26.3.更新 Bootcode
    • 26.4.更新文档
    • 26.5.追踪开发分支
    • 26.6.从源代码更新 FreeBSD
    • 26.7.多台机器的追踪
    • 26.8.在非 FreeBSD 主机上进行构建
  • 第27章 DTrace
    • 27.1.概述
    • 27.2.实现上的差异
    • 27.3.开启 DTrace 支持
    • 27.4.启用内核外部模块 DTrace
    • 27.5.使用 DTrace
  • 第28章 USB 设备模式/USB OTG
    • 28.1.概述
    • 28.2.USB 虚拟串行端口
    • 28.3.USB 设备模式网络接口
    • 28.4.USB 虚拟存储设备
  • 第四部分:网络通讯
  • 第29章 串行通信
    • 29.1.概述
    • 29.2.串行术语和硬件
    • 29.3.终端
    • 29.4.拨入服务
    • 29.5.拨出服务
    • 29.6.设置串行控制台
  • 第30章 PPP
    • 30.1.概述
    • 30.2.配置 PPP
    • 30.3.PPP 连接的故障排除
    • 30.4.使用以太网 PPP(PPPoE)
    • 30.5.使用 ATM 上的 PPP (PPPoA)
  • 第31章 电子邮件
    • 31.1.概述
    • 31.2.邮件组件
    • 31.3.DragonFly 邮件代理(DMA)
    • 31.4.Sendmail
    • 31.5.修改邮件传输代理
    • 31.6.邮件用户代理
    • 31.7.高级主题
  • 第32章 网络服务器
    • 32.1.概述
    • 32.2.inetd 超级服务器
    • 32.3.网络文件系统(NFS)
    • 32.4.网络信息系统(NIS)
    • 32.5.轻型目录访问协议(LDAP)
    • 32.6.动态主机设置协议(DHCP)
    • 32.7.域名系统(DNS)
    • 32.8.零配置网络(mDNS/DNS-SD)
    • 32.9.Apache HTTP 服务器
    • 32.10.文件传输协议(FTP)
    • 32.11.用于 Microsoft® Windows® 客户端的文件和打印服务(Samba)
    • 32.12.用 NTP 进行时钟同步
    • 32.13.iSCSI target 和 initiator 的配置
  • 第33章 防火墙
    • 33.1.概述
    • 33.2.防火墙的概念
    • 33.3.PF
    • 33.4.IPFW
    • 33.5.IPFILTER(IPF)
    • 33.6.Blacklistd
  • 第34章 高级网络
    • 34.1.概述
    • 34.2.网关和路由
    • 34.3.虚拟主机
    • 34.4.无线高级身份验证
    • 34.5.无线自组织(Ad-hoc)模式
    • 34.6.USB 网络共享
    • 34.7.蓝牙
    • 34.8.桥接
    • 34.9.链路聚合与故障转移
    • 34.10.使用 PXE 进行无盘操作
    • 34.11.共用地址冗余协议(CARP)
    • 34.12.VLAN
  • 第五部分:附录
  • 附录 A.获取 FreeBSD
    • A.1.镜像站
    • A.2.使用 Git
    • A.3.使用 Subversion
    • A.4.光盘
  • 附录 B.书目
    • B.1.FreeBSD 相关书籍
    • B.2.安全性参考文献
    • B.3.UNIX 历史
    • B.4.期刊与杂志
  • 附录 C.网络资源
    • C.1.网站
    • C.2.邮件列表
    • C.3.Usenet 新闻组
  • 附录 D.OpenPGP 密钥
    • D.1.官方成员
  • 术语表
  • 后记
由 GitBook 提供支持

FreeBSD 中文社区

在本页
  • 16.9.1. 设置 Heimdal KDC
  • 16.9.2. 配置服务器以使用 Kerberos
  • 16.9.3. 配置客户端以使用 Kerberos
  • 16.9.4. MIT 和 Heimdal 的差异
  • 16.9.5. Kerberos 配置技巧、窍门与故障排除
  • 16.9.6. 缓解 Kerberos 限制
  • 16.9.7. 资源与进一步的信息

这有帮助吗?

在GitHub上编辑
导出为 PDF
  1. 第16章 安全

16.9.Kerberos

上一页16.8.OpenSSL下一页16.10.TCP 封装器(TCP Wrapper)

最后更新于6天前

这有帮助吗?

Kerberos 是一种网络身份验证协议,最初由麻省理工学院(MIT)创建,旨在通过潜在的敌对网络安全地提供身份验证。Kerberos 协议使用强加密技术,使客户端和服务器能够证明其身份,而无需通过网络发送任何未加密的秘密。Kerberos 可以被描述为一种身份验证代理系统,也可以视为一种可信的第三方认证系统。在用户通过 Kerberos 进行身份验证后,他们的通信可以被加密,以确保隐私和数据完整性。

Kerberos 的唯一功能是提供对网络上用户和服务器的安全身份验证。它不提供授权或审计功能。建议将 Kerberos 与其他提供授权和审计服务的安全方法一起使用。

该协议的当前版本是第 5 版,描述于 RFC 4120 中。该协议有多个免费的实现,涵盖了广泛的操作系统。MIT 继续开发其 Kerberos 软件包。在美国,Kerberos 被作为加密产品广泛使用,并且历史上一直受到美国出口管制。在 FreeBSD 中,MITKerberos 作为 软件软件包和 Ports 可用。Heimdal Kerberos 实现是为了避免出口管制而在美国之外明确开发的。Heimdal Kerberos 发行版已包含在 FreeBSD 的基本安装中,另一个具有更多可配置选项的发行版可作为 在 Ports 中使用。

在 Kerberos 中,用户和服务被称为“主体”(principals),它们包含在一个名为“领域”(realm)的管理分组中。一个典型的用户主体形式为 user@REALM(领域通常使用大写字母)。

本节提供了如何使用 FreeBSD 中包含的 Heimdal 发行版设置 Kerberos 的指南。

为了演示 Kerberos 安装,命名空间将如下所示:

  • DNS 域(区域)将为 example.org。

  • Kerberos 领域将为 EXAMPLE.ORG。

注意

在设置 Kerberos 时使用真实的域名,即使它仅在内部运行。这可以避免 DNS 问题并确保与其他 Kerberos 领域的互操作性

16.9.1. 设置 Heimdal KDC

密钥分发中心(KDC)是 Kerberos 提供的集中式身份验证服务,是系统中的“可信第三方”。它是发放 Kerberos 票证的计算机,客户端用它来进行服务器身份验证。由于 KDC 被所有其他计算机视为可信,因此它具有更高的安全性。应限制对 KDC 的直接访问。

虽然运行 KDC 需要的计算资源较少,但为了安全原因,建议使用仅作为 KDC 运行的专用机器。

首先,按如下方式安装 软件包:

# pkg install heimdal

接下来,使用 sysrc 更新 /etc/rc.conf:

# sysrc kdc_enable=yes
# sysrc kadmind_enable=yes

接下来,按如下方式编辑 /etc/krb5.conf:

[libdefaults]
    default_realm = EXAMPLE.ORG
[realms]
    EXAMPLE.ORG = {
	kdc = kerberos.example.org
	admin_server = kerberos.example.org
    }
[domain_realm]
    .example.org = EXAMPLE.ORG

在这个例子中,KDC 将使用完全限定的主机名 kerberos.example.org。KDC 的主机名必须在 DNS 中是可解析的。

Kerberos 还可以使用 DNS 来定位 KDC,而不是在 /etc/krb5.conf 中使用 [realms] 部分。对于拥有自己 DNS 服务器的大型组织,上面的示例可以简化为:

[libdefaults]
      default_realm = EXAMPLE.ORG
[domain_realm]
    .example.org = EXAMPLE.ORG

并在 example.org 区域文件中包含以下行:

_kerberos._udp      IN  SRV     01 00 88 kerberos.example.org.
_kerberos._tcp      IN  SRV     01 00 88 kerberos.example.org.
_kpasswd._udp       IN  SRV     01 00 464 kerberos.example.org.
_kerberos-adm._tcp  IN  SRV     01 00 749 kerberos.example.org.
_kerberos           IN  TXT     EXAMPLE.ORG

注意

为了让客户端能够找到 Kerberos 服务,它们 必须 拥有完全配置的 /etc/krb5.conf,或者至少配置了 /etc/krb5.conf 和正确配置的 DNS 服务器。

接下来,创建包含所有主体(用户和主机)密钥的 Kerberos 数据库,这些密钥使用主密码进行加密。无需记住此密码,因为它将存储在 /var/heimdal/m-key 中;为了这个目的,使用一个 45 字符的随机密码是合理的。要创建主密钥,请运行 kstash 并输入密码:

# kstash

输出应类似于以下内容:

Master key: xxxxxxxxxxxxxxxxxxxxxxx
Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxx
# kadmin -l
kadmin> init EXAMPLE.ORG
Realm max ticket life [unlimited]:

最后,在 kadmin 中使用 add 创建第一个主体。暂时保留主体的默认选项,因为这些选项稍后可以通过 modify 修改。输入 ? 可以查看可用的选项。

kadmin> add tillman

输出应类似于以下内容:

Max ticket life [unlimited]:
Max renewable life [unlimited]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
Password: xxxxxxxx
Verifying password - Password: xxxxxxxx

接下来,通过运行以下命令启动 KDC 服务:

# service kdc start
# service kadmind start

虽然此时不会有 Kerberos 守护进程在运行,但可以通过获取刚刚创建的主体的票证来确认 KDC 是否正常工作:

% kinit tillman

输出应类似于以下内容:

tillman@EXAMPLE.ORG's Password:

使用 klist 确认是否成功获取票证:

% klist

输出应类似于以下内容:

Credentials cache: FILE:/tmp/krb5cc_1001
	Principal: tillman@EXAMPLE.ORG

  Issued                Expires               Principal
Aug 27 15:37:58 2013  Aug 28 01:37:58 2013  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG

测试完成后,可以销毁临时票证:

% kdestroy

16.9.2. 配置服务器以使用 Kerberos

配置服务器以使用 Kerberos 身份验证的第一步是确保 /etc/krb5.conf 文件正确配置。可以直接使用 KDC 中的版本,也可以在新系统上重新生成该文件。

安装 /etc/krb5.conf 后,使用 add --random-key 在 kadmin 中添加服务器的主机主体到数据库,但这不会将主机主体密钥提取到 keytab 中。要生成 keytab,可以使用 ext 将服务器的主机主体密钥提取到其自己的 keytab 中:

# kadmin

输出应类似于以下内容:

kadmin> add --random-key host/myserver.example.org
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
kadmin> ext_keytab host/myserver.example.org
kadmin> exit

请注意,ext_keytab 默认将提取的密钥存储在 /etc/krb5.keytab 中。当在正在进行 Kerberize 操作的服务器上运行时,这样做是可以的,但如果在其他地方提取 keytab,则应使用 --keytab <path/to/file> 参数:

# kadmin

输出应类似于以下内容:

kadmin> ext_keytab --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exit
GSSAPIAuthentication yes

16.9.3. 配置客户端以使用 Kerberos

与服务器一样,客户端也需要在 /etc/krb5.conf 中进行配置。可以将该文件复制到客户端(以安全方式)或根据需要重新输入。

在测试 Kerberized 应用程序时,可以尝试使用 tcpdump 等数据包嗅探工具,以确认没有敏感信息以明文形式传输。

各种 Kerberos 客户端应用程序可供使用。随着一个桥接机制的出现,使得使用 SASL 进行身份验证的应用程序也能使用 GSS-API 机制,许多客户端应用程序都可以使用 Kerberos 进行身份验证,从 Jabber 客户端到 IMAP 客户端。

在一个域内,用户的 Kerberos 主体通常会映射到本地用户账户。有时,需要允许没有匹配 Kerberos 主体的本地用户账户访问。例如,tillman@EXAMPLE.ORG 可能需要访问本地用户账户 webdevelopers。其他主体也可能需要访问该本地账户。

.k5login 和 .k5users 文件可以放在用户的主目录中,用来解决这个问题。例如,如果以下的 .k5login 文件放在 webdevelopers 用户的主目录中,列出的两个主体将可以访问该账户,而无需共享密码:

tillman@example.org
jdoe@example.org

16.9.4. MIT 和 Heimdal 的差异

MIT 和 Heimdal 实现之间的主要区别在于 kadmin 有一组不同的命令,并使用不同的协议。如果 KDC 是 MIT 版本的,则不能使用 Heimdal 版本的 kadmin 远程管理 KDC,反之亦然。

当在 FreeBSD 上使用 MIT Kerberos 作为 KDC 时,请执行以下命令,将所需的配置添加到 /etc/rc.conf 中:

# sysrc kdc_program="/usr/local/sbin/krb5kdc"
# sysrc kadmind_program="/usr/local/sbin/kadmind"
# sysrc kdc_flags=""
# sysrc kdc_enable="YES"
# sysrc kadmind_enable="YES"

16.9.5. Kerberos 配置技巧、窍门与故障排除

在配置和故障排除 Kerberos 时,请牢记以下几点:

  • 使用 Heimdal 或 MITKerberos 的 Port 时,确保 PATH 列表中的客户端应用程序版本优先于系统版本。

  • 领域中的所有主机必须能够在 DNS 中进行正向和反向解析,或者至少存在于 /etc/hosts 中。CNAME 记录可以使用,但 A 和 PTR 记录必须正确并已设置。无法解析主机时,错误信息并不直观:Kerberos5 拒绝认证,因为读取请求失败:未找到密钥表条目。

  • 一些作为客户端连接到 KDC 的操作系统未将 ksu 的权限设置为 setuid root。这意味着 ksu 无法正常工作。这是权限问题,而不是 KDC 错误。

  • 在 KDC 上运行数据包嗅探器来辅助故障排除时,运行 kinit 从工作站启动,Ticket Granting Ticket (TGT) 会立即发送,甚至在输入密码之前。这是因为 Kerberos 服务器会自由地向任何未授权的请求发送 TGT。然而,每个 TGT 都会使用从用户密码派生的密钥加密。当用户输入密码时,密码并不会发送到 KDC,而是用于解密 kinit 已经获取的 TGT。如果解密过程导致有效票证和有效时间戳,则说明用户拥有有效的 Kerberos 凭据。这些凭据包括用于建立与 Kerberos 服务器之间安全通信的会话密钥,以及实际的 TGT,该 TGT 使用 Kerberos 服务器自身的密钥加密。第二层加密允许 Kerberos 服务器验证每个 TGT 的真实性。

  • 主机主体可以有更长的票证生命周期。如果用户主体的生命周期为一周,但连接的主机的生命周期为九小时,则用户缓存将包含过期的主机主体,票证缓存将无法按预期工作。

16.9.6. 缓解 Kerberos 限制

由于 Kerberos 是一种“全有或全无”的方法,网络上的每个启用的服务必须要么修改以与 Kerberos 一起工作,要么采取其他措施来防止网络攻击。这是为了防止用户凭证被窃取并被重新使用。一个例子是,当所有远程 shell 启用了 Kerberos,但非 Kerberized 的 POP3 邮件服务器仍以明文发送密码。

KDC 是单点故障。根据设计,KDC 必须像其主密码数据库一样安全。KDC 上不应该运行任何其他服务,并且应该物理上保持安全。危险性很高,因为 Kerberos 将所有密码加密存储,并使用相同的主密钥,而该密钥作为文件存储在 KDC 上。

被攻破的主密钥并不像人们想象的那么糟糕。主密钥仅用于加密 Kerberos 数据库,并作为随机数生成器的种子。只要对 KDC 的访问是安全的,攻击者无法利用主密钥做太多事情。

如果 KDC 无法访问,网络服务将无法使用,因为无法执行身份验证。可以通过设置一个主 KDC 和一个或多个从 KDC,以及通过小心实现使用 PAM 进行的备用身份验证来缓解这一问题。

16.9.7. 资源与进一步的信息

创建主密钥后,应初始化数据库。Kerberos 管理工具 可以在 KDC 上直接对数据库操作,而无需使用 网络服务,使用 kadmin -l 运行。这解决了在数据库创建之前尝试连接到数据库的问题。在 kadmin 提示符下,使用 init 创建领域的初始数据库:

接下来,在服务器上创建 /etc/krb5.keytab 文件。这是将服务“Kerberize”的关键步骤——它对应于生成一个在服务与 KDC 之间共享的密钥。该密钥是加密密钥,存储在一个“keytab”文件中。keytab 包含服务器的主机密钥,允许服务器和 KDC 验证彼此的身份。必须以安全的方式将其传输到服务器,因为如果密钥公开,服务器的安全性将被破坏。通常,keytab 是在管理员的受信机器上使用 kadmin 生成的,然后通过安全的方式传输到服务器,例如使用 ;如果与所需的安全策略一致,也可以直接在服务器上创建。非常重要的是,必须以安全的方式将 keytab 传输到服务器:如果密钥被其他方知道,该方可以冒充任何用户访问服务器!直接在服务器上使用 kadmin 很方便,因为 KDC 数据库中的主机主体条目也是通过 kadmin 创建的。

当然,kadmin 是一个 Kerberos 服务;需要 Kerberos 票证才能对网络服务进行身份验证,但为了确保运行 kadmin 的用户确实在场(并且他们的会话没有被劫持),kadmin 会提示输入密码以获取新票证。对 kadmin 服务进行身份验证的主体必须被允许使用 kadmin 接口,这在 /var/heimdal/kadmind.acl 中进行了指定。有关设计访问控制列表的详细信息,请参阅 info heimdal 中的“远程管理”部分。管理员也可以通过本地控制台或 安全地连接到 KDC,并使用 kadmin -l 本地执行管理操作。

然后,可以通过 或可移动媒体将 keytab 安全地复制到服务器。务必指定一个非默认的 keytab 名称,以避免将不必要的密钥插入到系统的 keytab 中。

此时,服务器可以使用其共享密钥(存储在 krb5.keytab 中)读取来自 KDC 的加密消息。它现在准备启用使用 Kerberos 的服务。最常见的此类服务之一是 ,它通过 GSS-API 支持 Kerberos。在 /etc/ssh/sshd_config 中,添加以下行:

更改此配置后,必须重启 以使新配置生效:service sshd restart。

通过使用 kinit、klist 和 kdestroy 在客户端进行测试,以获取、显示并删除一个现有主体的票证。Kerberos 应用程序也应能够连接到启用 Kerberos 的服务器。如果这无法正常工作,但获取票证成功,则问题可能出在服务器,而非客户端或 KDC。对于 Kerberized 的 ,默认情况下 GSS-API 是禁用的,因此可以使用 ssh -o GSSAPIAuthentication=yes <hostname> 来进行测试。

有关 .k5users 的更多信息,请参阅 。

客户端应用程序在执行相同任务时,可能会使用略有不同的命令行选项。建议参考 中的说明。注意路径问题:MIT Port 默认安装到 /usr/local/,如果 PATH 列出系统目录在前,FreeBSD 系统应用程序将代替 MIT 版本运行。

如果领域中的所有计算机的时间设置不同步,身份验证可能会失败。 介绍了如何使用 NTP 同步时钟。

如果更改了主机名,则必须更改 host/ 主体并更新 keytab。对于像 Apache 的 使用的 HTTP/ 主体等特殊 keytab 条目也适用此规则。

使用 MITKerberos 时,要允许主体的票证生命周期超过默认的十小时生命周期,请在 提示符下使用 modify_principal 修改相关主体和 krbtgt 主体的 maxlife。然后,主体可以使用 kinit -l 请求具有更长生命周期的票证。

设置 krb5.dict 以防止使用特定坏密码(如 中所述)时,请记住它仅适用于已分配密码策略的主体。krb5.dict 中使用的格式为每行一个字符串。创建指向 /usr/share/dict/words 的符号链接可能会有所帮助。

Kerberos 允许用户、主机和服务彼此之间进行身份验证,但没有机制可以验证 KDC 对用户、主机或服务的身份。这意味着一个被篡改的 kinit 可能记录所有用户名和密码。像 这样的文件系统完整性检查工具可以缓解这个问题。

security/krb5
security/heimdal
security/heimdal
kadmin(8)
kadmind(8)
scp(1)
ssh(1)
scp(1)
sshd(8)
sshd(8)
ssh(1)
ksu(1)
http://web.mit.edu/Kerberos/www/
“使用 NTP 进行时钟同步”
www/mod_auth_kerb
kadmin(8)
kadmind(8)
security/tripwire
Kerberos 常见问题解答
设计一个认证系统:四幕对话
RFC 4120, Kerberos 网络认证服务(V5)
MIT Kerberos 官方主页
Heimdal Kerberos 项目 Wiki 页面