我用kerberos authentication设置hdfs服务,配置如下:
<property>
<name>hadoop.http.filter.initializers</name>
<value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
</property>
<property>
<name>hadoop.http.authentication.type</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.http.authentication.simple.anonymous.allowed</name>
<value>false</value>
</property>
<property>
<name>hadoop.http.authentication.signature.secret.file</name>
<value>/opt/hadoop/hdfs/default/etc/hadoop/hadoop-http-auth-signature-secret</value>
</property>
<property>
<name>hadoop.http.authentication.kerberos.principal</name>
<value>HTTP/192.168.47.143@CLOUD.LOCAL</value>
</property>
<property>
<name>hadoop.http.authentication.kerberos.keytab</name>y4
<value>/opt/hadoop/hdfs/default/etc/hadoop/HTTP.keytab</value>
</property>
<property>
<name>hadoop.http.authentication.cookie.domain</name>y4
<value>CLOUD.LOCAL</value>
</property>
我可以通过运行以下命令从linux环境测试身份验证:
$kinit“http/192.168.47。143@cloud.local"
$curl-k-v-u“http/192.168.47。143@cloud.local“--协商https://...:50470
这将返回良好的内容。
但当我尝试从windows ie访问时,它返回:
gssexception:未提供有效凭据(机制级别:找不到任何kerberos凭据)
我已经将/etc/krb5.conf从服务器复制到c:\windows\krb5.ini,并将主机名添加到安全区域。我还应该做些什么让ie知道在哪里可以找到钥匙?
我甚至尝试安装mitkerberos应用程序(http://doc.mapr.com/display/mapr/configuring+kerberos+authentication+for+windows)启用身份验证环境,但它仍然不起作用,我现在不知道。
1条答案
按热度按时间vc9ivgsu1#
默认情况下,windows客户端不需要c:\windows\krb5.ini来协商kerberos。尽管您需要它,但是如果您尝试执行一些高级过程,例如在windows系统本身上验证kerberos密钥表,那么就需要它。向前看,现在你已经有了文件,把它放在适当的地方也没什么坏处。我认为问题真的与ie安全区域设置有关。这可能是一些你可能错过了-因为这可能是棘手的。
添加
http://192.168.47.143
以及*.cloud.local
到客户端计算机上的ie本地intranet区域。确保将windows凭据配置为发送到intranet区域中的远程服务器(这是默认设置)。
在ie高级选项卡下,必须选中“启用集成windows身份验证”框。
我会清除ie的临时互联网文件,然后运行
klist purge
,然后在再次测试之前重新启动ie。请注意,kerberos最适用于主机名。最佳做法是避免使用ip地址。使用kerberos时,客户机必须与目标资源位于同一个域中,除非(1)域之间存在有效的、可验证的信任,并且(2)目标资源必须是允许客户机访问的acl。否则,该令牌可能会显示为ntlm,在这种情况下,spnego库会将其视为“有缺陷的令牌”。