我在 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"
}
如果您需要查看任何其他配置,请告诉我。谢谢。
编辑
/var/log/secure
每当非根用户通过 SSH 或控制台登录时,都会显示此消息。它似乎只发生在基于密码的身份验证中。如果我对服务器执行基于密钥的 ssh,我看不到错误。如果我使用 root 登录,则看不到错误。我们的 Linux 服务器根据 Active Directory 进行身份验证,因此它是 PAM、samba、kerberos 和 winbind 的完美组合,用于对用户进行身份验证。
如果您在主机上没有密钥表,那么您确实没有正确使用 Kerberos,并且如果攻击者可以使您的 DNS 缓存中毒,则很容易受到相对简单的攻击。
Kerberos 是一个共享机密系统,为了有效地工作,任何接受 Kerberos 票证的服务器都需要有一份共享机密的本地副本,Kerberos 密钥分发中心 (KDC) 也有该副本。这就是密钥表,即该服务的共享密钥的本地副本。
keytab 也可以用作获取 Kerberos 票证授予票证 (TGT) 的缓存,但这是在您希望主机充当 Kerberos 服务器的客户端而不是服务器时使用的。
pam_krb5
使用 keytab 验证输入的密码是 KDC 中的实际密码。如果您没有允许这样做的密钥表,那么您所验证的只是某处的某台机器响应了 Kerberos 协议请求。这可能是一个旧的,但我遇到了同样的问题并且想删除该消息。我遵循了 ArchLinux 的这些说明并解决了它。
https://wiki.archlinux.org/index.php/Active_Directory_Integration#Creating_a_machine_key_tab_file
只需输入:
不过,这可能取决于您的设置。
要禁用 keytab 验证并因此抑制这些日志消息,请将
no_validate
选项添加到您的 PAM 设置。例如:在我的 CentOS 6 服务器上,我
pam_krb5.so
在这两个文件中看到的任何地方进行了此更改:我确信 SLES 是相似的,但我们正在逐步淘汰该操作系统,因此我不打算在那里进行测试。
您可以禁用验证以避免日志中出现 Banjer 建议的消息,但验证步骤的目的是防止坏人设置他们自己的虚假 KDC 的攻击。换句话说,您需要一个主机主体来验证 KDC 提供的 TGT 是真实的。
正如@ryan-fisher 在他的回复中提到的,主机需要一个 keytab 文件,以便它能够检索 TGT 以进行预授权。
看不到 root 消息的原因是因为该用户是本地用户(不需要 Kerberos 进行身份验证)。当使用 SSH 授权密钥时,您还可以绕过 Kerberos,因此那里也不会出现丢失密钥表的错误。
现在,您需要做的是确保
/etc/krb5.keytab
包含机器主体的密钥host/domain.name.of.host
。假设反向 DNS 设置正确,然后您将能够使用 ssh 登录而无需输入密码,前提是您拥有有效的 TGT。