读取密钥表文件 krb5.keytab 时出错

读取密钥表文件 krb5.keytab 时出错

我注意到 SLES 11.2 和 CentOS 6.3 上都出现了这些 kerberos keytab 错误消息:

sshd[31442]: pam_krb5[31442]: error reading keytab 'FILE: / etc/ krb5. keytab'

/etc/krb5.keytab在我们的主机上不存在,而且根据我对 keytab 文件的理解,我们不需要它。这是 Kerberos keytab 介绍

keytab 是一个包含 Kerberos 主体和加密密钥对的文件(这些密钥来自 Kerberos 密码)。您可以使用此文件登录 Kerberos,而无需输入密码。keytab 文件最常见的个人用途是允许脚本在无需人工交互的情况下对 Kerberos 进行身份验证,或者将密码存储在纯文本文件中。

这听起来像是我们不需要的东西,而且从安全角度来说也许没有它会更好。

我怎样才能防止此错误出现在我们的系统日志中?这是我的 krb5.conf(如果有用的话):

banjer@myhost:~> cat /etc/krb5.conf
# This file managed by Puppet
#
[libdefaults]
        default_tkt_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
        default_tgs_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
        preferred_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
        default_realm = FOO.EXAMPLE.COM
        dns_lookup_kdc = true
        clockskew = 300

[logging]
        default = SYSLOG:NOTICE:DAEMON
        kdc = FILE:/var/log/kdc.log
        kadmind = FILE:/var/log/kadmind.log

[appdefaults]
pam = {
        ticket_lifetime = 1d
        renew_lifetime = 1d
        forwardable = true
        proxiable = false
        retain_after_close = false
        minimum_uid = 0
        debug = false
        banner = "Enter your current"
}

如果您需要查看任何其他配置,请告诉我。谢谢。

编辑

每当非 root 用户通过 SSH 或控制台登录时,都会显示此消息/var/log/secure。它似乎只发生在基于密码的身份验证中。如果我对服务器进行基于密钥的 ssh,则看不到该错误。如果我以 root 身份登录,则看不到该错误。我们的 Linux 服务器根据 Active Directory 进行身份验证,因此它是用于对用户进行身份验证的 PAM、samba、kerberos 和 winbind 的强大组合。

答案1

如果您的主机上没有密钥表,那么您实际上就没有正确使用 Kerberos,而且如果攻击者可以毒害您的 DNS 缓存,那么您就很容易受到相对简单的攻击。

Kerberos 是一个共享秘密系统,为了有效工作,任何接受 Kerberos 票证的服务器都需要拥有 Kerberos 密钥分发中心 (KDC) 也拥有的共享秘密的本地副本。这就是密钥表,即该服务的共享秘密的本地副本。

密钥表还可以用作获取 Kerberos 票证授予票证 (TGT) 的缓存,但这适用于您希望主机充当 Kerberos 服务器的客户端而不是服务器的情况。

pam_krb5使用 keytab 来验证输入的密码是否是 KDC 中的实际密码。如果您没有 keytab 来允许这样做,那么您所验证的只是某台机器是否响应了 Kerberos 协议请求。

答案2

这可能是一个老问题,但我遇到了同样的问题,并想摆脱这个消息。我按照 ArchLinux 的这些说明解决了它。

https://wiki.archlinux.org/index.php/Active_Directory_Integration#Creating_a_machine_key_tab_file

只需输入以下内容:

net ads keytab create -U administrator

但这可能取决于您的设置。

答案3

要禁用 keytab 验证并因此禁止这些日志消息,请将该no_validate选项添加到您的 PAM 设置中。例如:

auth        sufficient    pam_krb5.so use_first_pass no_validate

在我的 CentOS 6 服务器上,我对这pam_krb5.so两个文件中引用的任何位置都进行了此更改:

/etc/pam.d/password-auth-ac
/etc/pam.d/system-auth-ac

我确信 SLES 类似,但我们正在逐步淘汰该操作系统,所以我不打算在那里测试它。

答案4

正如 @ryan-fisher 在他的回复中提到的,主机需要一个 keytab 文件才能检索用于预授权的 TGT。

之所以无法看到 root 用户的消息,是因为该用户是本地用户(不需要 Kerberos 进行身份验证)。使用 SSH 授权密钥时,您也会绕过 Kerberos,因此也不会出现有关缺少密钥表的错误。

现在,您需要做的是确保其中/etc/krb5.keytab包含机器主体的密钥host/domain.name.of.host。假设反向 DNS 设置正确,您将能够使用 ssh 登录而无需输入密码(假设您拥有有效的 TGT)。

相关内容