设置 KDC
如前所述,设置 KDC 不是 RHCE 目标,但是我们需要一个目标来执行其他使用 Kerberos 的目标,例如设置 NFS 以使用 Kerberos。
以下命令在我们的 KDC 服务器上运行。
yum install krb5-server krb5-workstation
安装这些软件包后,需要修改 /etc/krb5.conf 文件。
默认情况下,一些需要配置的东西被注释掉了。
以下是默认配置的副本。
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false # default_realm = EXAMPLE.COM default_ccache_name = KEYRING:persistent:%{uid} [realms] # EXAMPLE.COM = { # kdc = kerberos.example.com # admin_server = kerberos.example.com # } [domain_realm] # .example.com = EXAMPLE.COM # example.com = EXAMPLE.COM
删除 default_realm 和整个 [realms] 部分的注释,并根据环境适当地设置这些注释,对于本示例,我将坚持使用 example.com,我的 kdc 为 kdc.example.com
接下来编辑 /var/kerberos/krb5kdc/kdc.conf 文件并再次将 example.com 的实例替换为特定域,我将再次将其保留为默认值,因为我在这里使用 example.com 域进行测试。
[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] EXAMPLE.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }
创建 Kerberos 数据库
现在我们已准备好使用 kdb5_util 命令创建 Kerberos 数据库,如下所示。
系统将提示我们输入将作为主密钥的密码,KDC 使用该密码来加密数据库,因此安全地存储该密码非常重要。
[jack@onitroad ~]# kdb5_util create -s Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM', master key name 'K/jack@onitroad' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: Re-enter KDC database master key to verify:
此命令需要大约一分钟才能完成,因为加载随机数据需要一段时间,我们可以在 GUI 中移动鼠标或者按键以加快进程。
指定 -s 标志以便创建存储文件,允许 Kerberos 服务自动启动,而无需手动提供主密钥。
服务管理
说到自动启动,我们希望同时启用和启动 kadmin 和 krb5kdc,以便我们的 Kerberos KDC 服务在系统重启后自动可用。
[jack@onitroad ~]# systemctl enable kadmin krb5kdc Created symlink from /etc/systemd/system/multi-user.target.wants/kadmin.service to /usr/lib/systemd/system/kadmin.service. Created symlink from /etc/systemd/system/multi-user.target.wants/krb5kdc.service to /usr/lib/systemd/system/krb5kdc.service. [jack@onitroad ~]# systemctl start kadmin krb5kdc
有关使用 systemctl 进行基本服务管理的更多信息,请参阅此处的教程。
防火墙配置
为了让其他系统与 KDC 的服务进行通信,需要设置正确的防火墙规则。
这可以使用 firewalld 完成,如下所示。
[jack@onitroad ~]# firewall-cmd --permanent --add-service=kerberos success You have new mail in /var/spool/mail/root [jack@onitroad ~]# firewall-cmd --reload success
预定义的 Kerberos 服务允许 TCP/UDP 端口 88 流量进入。
我们可以检查并确认 krb5kdc 服务确实在这些端口上侦听连接。
[jack@onitroad ~]# netstat -antup | grep krb tcp 0 0 0.0.0.0:88 0.0.0.0:* LISTEN 12744/krb5kdc tcp6 0 0 :::88 :::* LISTEN 12744/krb5kdc udp 0 0 0.0.0.0:88 0.0.0.0:* 12744/krb5kdc udp6 0 0 :::88 :::* 12744/krb5kdc
我们只允许 Kerberos 通过,请注意,到 kadmin 的流量需要 TCP 749,因此如果我们想远程访问它,我们也需要考虑打开它,但是为了我们的目的并提高安全性,我们将其保留为仅本地访问.
Kerberos 管理
可以通过运行 kadmin.local 命令来管理 KDC。
要查看 kadmin.local 上下文中的可用命令,只需运行“?”。
从这些有用的信息中,我们可以看到“addprinc”可用于添加 Kerberos 主体,我们将为“用户”帐户执行此操作。
[jack@onitroad ~]# kadmin.local Authenticating as principal root/jack@onitroad with password. kadmin.local: addprinc user WARNING: no policy specified for jack@onitroad; defaulting to no policy Enter password for principal "jack@onitroad": Re-enter password for principal "jack@onitroad": Principal "jack@onitroad" created.
我们的 KDC 现在已准备好接受客户端连接并向“用户”主体提供票证。
设置客户端
现在是配置我们的客户端系统以使用 KDC 的时候了。
我们可以使用几种不同的方法来完成此操作,我个人发现在这里使用 GUI 实际上非常快速和容易。
为了使用 GUI,首先安装 authconfig-gtk 包。
yum install authconfig-gtk -y
完成后,只需从 GUI 中的终端窗口运行“authconfig-gtk”。
这将打开身份验证配置窗口。
在 Identity & Authentication 选项卡中,从 User Account Configuration 下拉列表中选择 LDAP 以访问身份验证配置,我们将在该配置中选择 Kerberos 密码并提供我们的领域和 KDC 信息。
在这个例子中,如前面所示,KDC 上的领域是EXAMPLE.COM,我们 KDC 的 IP 地址是 192.168.1.13 因为我没有设置 DNS 我无法使用 FQDN,管理服务器也是与 KDC 相同,因为这是运行 kadmin 的地方。
定义领域和 KDC 后,单击应用按钮。
如果我们不喜欢 GUI 或者根本没有安装 GUI,我们也可以通过运行“authconfig-tui”来使用文本用户界面。
这两个都会自动配置我们的 /etc/sssd/sssd.conf 文件,但是如果你知道你在做什么,你可以手动编辑它。
就我个人而言,尝试手动设置 sssd.conf 时总是有很糟糕的经历,所以我绝对推荐使用这些 authconfig 工具中的任何一个。
创建用户
在我们的 KDC 上,我们为“用户”创建了一个主体,现在我们将在客户端系统上创建一个本地用户帐户。
这在技术上不是必需的,我们应该能够从另一个用户 kinit 但是为了一致性我们将使用这个帐户。
[jack@onitroad ~]# useradd user
现在我们准备尝试从 KDC 获取票证,首先我们成为新用户并运行“kinit”命令,该命令用于获取和缓存我们的 Kerberos 票证。
[jack@onitroad ~]# su user [jack@onitroad root]$ kinit Password for jack@onitroad: [jack@onitroad root]$ klist Ticket cache: KEYRING:persistent:1004:1004 Default principal: jack@onitroad Valid starting Expires Service principal 06/11/2014 00:51:16 06/12/2014 00:51:16 krbtgt/jack@onitroad
从“klist”我们可以看到,我们已经获得了一张有效期为 24 小时的票据。
准备工作
为了使 Kerberos 正常运行,必须首先在两台服务器上配置以下内容。
- NTP:需要时间同步,时差超过5分钟认证失败。有关设置的更多详细信息,请参阅我们关于将时间与 NTP 同步的教程。
- DNS:理想情况下,FQDN 应该在适当的环境中解析,但是在这里我们只使用 IP 地址。修改 /etc/hosts 也可用于测试,但建议正确使用 DNS。
Kerberos 是一种身份验证协议,可以为非安全网络上的各种服务提供安全的网络登录或者 SSO。
Kerberos 使用加密票证的概念,可以帮助减少需要通过网络发送密码的次数。
这些票据由集中式密钥分发中心 (KDC) 在整个 Kerberos 领域发行。
在这里,我们将介绍如何在 CentOS Linux 中设置 KDC 并从客户端系统获取 Kerberos 票证。
示例环境
这是我们将要测试的服务器列表,它们都运行 CentOS 7.
- Kerberos 服务器 (KDC):192.168.1.13 - 此 Linux 服务器将充当我们的 KDC 并提供 Kerberos 票证。
- Kerberos 客户端:192.168.1.14 - 此 Linux 客户端将从 KDC 请求 Kerberos 票证。