读取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主体和encryption密钥(这些都是从Kerberos密码派生的)对的文件。 您可以使用此文件login到Kerberos而不提示input密码。 keytab文件最常见的用途是允许脚本在没有人为干预的情况下对Kerberos进行身份validation,或者将密码存储在纯文本文件中。

这听起来像我们不需要的东西,也许没有它的安全性更好。

我怎样才能防止这个错误popup在我们的系统日志? 这是我的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" } 

让我知道如果你需要看到任何其他configuration。 谢谢。

编辑

只要非root用户通过SSH或控制台login,就会在/var/log/secure显示此消息。 这似乎只发生在基于密码的身份validation。 如果我做一个基于密钥的SSH服务器,我没有看到错误。 如果我用rootlogin,我看不到错误。 我们的Linux服务器通过Active Directory进行身份validation,所以它是用于对用户进行身份validation的PAM,samba,Kerberos和winbind的完美组合。

如果主机上没有密钥表,那么确实没有正确使用Kerberos,并且如果攻击者能够中毒DNScaching,则可以对其进行相对简单的攻击。

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

密钥表还可以用作获取Kerberos票据授予票据(TGT)的caching,但是当您希望主机充当Kerberos服务器的客户端而不是服务器时。

pam_krb5使用keytab来validationinput的密码是KDC中的实际密码。 如果你没有一个keytab来允许这个,那么你正在validation的是某个机器对某个Kerberos协议请求做出了响应。

要禁用密钥表validation并因此禁止这些日志消息,请将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是相似的,但我们正在逐步淘汰这个操作系统,所以我不打算在那里testing它。

您可以禁用validation以避免Banjerbuild议的日志中的消息,但validation步骤的目的是防止坏人build立自己的虚假KDC的攻击。 换句话说,你需要一个主机负责人来validationKDC给出的TGT是真实的。

这可能是一个旧的,但我有同样的问题,并希望摆脱消息。 我遵循ArchLinux的这些指令并解决了它。

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

只要input这个:

 net ads keytab create -U administrator 

不过,这可能取决于您的设置。

正如@ ryan-fisher在他的回复中提到的,主机需要一个keytab文件,以便它能够检索一个TGT for preauth。

消息不被看到的原因是因为该用户是本地的(不需要Kerberos进行身份validation)。 当使用SSH授权密钥时,你也可以绕开Kerberos,所以在那里也不会有错误的密钥。

现在,您需要做的是确保/etc/krb5.keytab包含机器的主体host/domain.name.of.host的密钥。 假设反向DNS设置正确,那么假设你有一个有效的TGT,你就可以使用sshlogin而不用input密码。