首先,使用setspn命令为用户注册服务主体名称。
setspn-一个CS/dummy@abc.comdummyuser
setspn-l dummyuser
将输出作为
CS/dummy@abc.com
接下来,当使用/mapUser选项执行ktpass命令时,将修改用户帐户的服务主体名称,从而删除域组件。
ktpass/passPassword@123-out dummy.1.keytab-princ CS/dummy@abc.com-crypto DES-CBC-MD5+DumpSalt-ptype KRB5_NT_PRINCIAL+desOnly/mapOp set/mapUser dummyuser
setspn-l dummyuser
将输出作为
CS/伪
以下两个命令是否正确并且以相同的方式工作?
setspn-一个CS/伪伪
setspn-a CS/dummy@abc.comdummyuser
在SPN中指定服务名称时,是否也必须包括域组件?你能澄清一下吗?
由于您没有提到,我假设您处于Windows Active Directory域环境中?我这么说是因为您的示例中给出的命令"ktpass"是Windows的本机命令。基于此,我将假设您的Active Directory DNS域名是abc.com,Kerberos领域名称是abc.com。
- 创建keytab时,SPN会映射到当时的用户或计算机对象(主体,用Kerberos术语来说),因此之后不需要调整该主体的SPN,除非将它们添加为辅助SPN
- 帮自己一个忙,将Kerberos领域名称用大写字母放在keytab创建命令中。最好将密码随机化,这样就没有人知道了。Kerberos SSO功能可以很好地工作。Kerberos领域名称需要附加到"/mapUser"参数中。我把你的例子改成了你应该用的更好的例子
- 这超出了您的问题范围,但不再使用DES加密。它在业界早已失宠。我不会再多说了,因为这不是你要问的
- 不要使用"setspn-a"语法在主体上添加或创建SPN,而是使用"setsprn-s"作为"-s"检查重复SPN,而"-a"则不检查(请参见:"setspn-s"与"setspn-a")
- 确保您完全限定SPN的主机部分(即dummy.abc.com,而不仅仅是dummy)。否则,身份验证机制可能会立即尝试NTLM,而不是您想要的Kerberos
- 在一个仅由单个DNS域和单个Kerberos领域组成的简单环境中,并且已经设置了Kerberos领域到DNS域的映射(在UNIX/Linux上通常由/etc/krb5.conf进行,Windows会自动处理,但如果没有,则会尝试C:\Windows\krb5.ini(如果存在)),虽然在运行"setspn-a"或"setspn-s"时不需要将Kerberos领域限定为SPN的一部分,但应该在Kerberos创建命令中这样做
所以,在你的情况下,基于我提到的一切,而你可以使用:
setspn -a CS/dummy dummyuser
这样做会更好:
setspn -s CS/dummy.abc.com dummyuser
为了获得额外的荣誉,我还相应地修改了您的keytab创建命令,尽管保留了DES部分,以免进一步混淆。
ktpass +rndPass -out dummy.1.keytab -princ CS/dummy.abc.com@ABC.COM -crypto DES-CBC-MD5 +DumpSalt -ptype KRB5_NT_PRINCIPAL +desOnly /mapOp set /mapUser dummyuser@ABC.COM